CodeForces - 372C Watching Fireworks is Fun dp
http://codeforces.com/problemset/problem/372/C
题意:在一条街道上(线段),有m个烟花,给出每个烟花的位置和燃放的时间,以及一个b【i】值,当烟花燃放时,你在街道的x(1=<x<=n)位置上获得的乐趣值为
b【i】-abs(a【i】-x),刚开始你可以在任意位置,之后可以移动你的位置,每秒可移动d个单位,求所有烟花燃放完之后的乐趣值最大值
dp【i】【j】表示看完前i个烟花且最后位置在j上的最大乐趣值
转移方程很简单:
dp【i】【j】=max(dp【i-1】【k】)+b【i】-abs(a【i】-x) (j - d * (t [i] - t [i-1]) =< k <= j + d * (t [i] - t [i-1]) )
朴素方法必然会T,需要单调队列优化,维护一个递减的单调队列,每次通过下标从队首维护 使得队内元素的原序列下标 满足区间左边界条件,接不断着把满足右边界条件的元素入队,且入队时维护单调递减的性质,这样队首元素保存的就是某个范围内的最大值了
#include<bits/stdc++.h>
using namespace std;
const int maxn=305;
long long a[maxn],b[maxn],t[maxn];
long long dp[2][155000];
const long long inf=0x3f3f3f3f3f3f3f3f;
struct node
{int index;long long x;
}que[255000];
inline long long abss(long long x)
{return x<0?-x:x;
}
long long f(int i,int j)
{return b[i]-abss(a[i]-j);
}
int main()
{int n,m,d,i,j;while(cin>>n>>m>>d){for(i=1;i<=m;i++)scanf("%lld %lld %lld",&a[i],&b[i],&t[i]);memset(dp,-inf,sizeof(dp));int noww=1,pree=0;for(i=1;i<=n;i++)dp[1][i]=f(1,i);for(i=2;i<=m;i++){swap(noww,pree);long long le,ri,now=(t[i]-t[i-1])*d;int index=1,head=1,tail=1;for(j=1;j<=n;j++){le=max(1ll,j-now),ri=min(j+now,n*1ll);while(que[head].index<le&&head<tail)head++;while(index<=ri){node temp;temp.index=index;temp.x=dp[pree][index];while(que[tail-1].x<=temp.x&&tail>head)tail--;que[tail++]=temp;index++;}dp[noww][j]=que[head].x+f(i,j);}}long long ans=-inf;for(i=0;i<=n;i++)ans=max(ans,dp[noww][i]);cout<<ans<<endl;}return 0;
}
CodeForces - 372C Watching Fireworks is Fun dp相关推荐
- Codeforces 372 C. Watching Fireworks is Fun (单调队列优化dp)
链接:C. Watching Fireworks is Fun 题意: 城镇中有 n 个位置,有 m 个烟花要放,每秒钟可以移动 d 长度的距离,每个烟花放出的地点和时间分别为 a[i] 和 t[i] ...
- Codeforces 148D. Bag of mice(概率dp)
Codeforces 148D. Bag of mice(概率dp) Description The dragon and the princess are arguing about what to ...
- CodeForces - 372CWatching Fireworks is Fun+DP+单调队列优化
[题目描述] CodeForces - 372CWatching Fireworks is Fun 题目的大概意思就是在一个编号为1-n的街道上现在按照时间顺序放烟花,每个烟花获得的幸福感为b−abs ...
- Codeforces 1276D/1259G Tree Elimination (树形DP)
题目链接 http://codeforces.com/contest/1276/problem/D 题解 我什么DP都不会做,吃枣药丸-- 设\(f_{u,j}\)表示\(u\)子树内,\(j=0\) ...
- Codeforces 264B Good Sequences ★ (分解素因子+DP)
题目链接:http://codeforces.com/problemset/problem/264/B 题目大意:给定一个数列a1,a2,a3,a4,--,an(数据保证ai严格递增,n<=10 ...
- Codeforces 118 D. Caesar's Legions (dp)
题目链接:http://codeforces.com/contest/118/problem/D 有n个步兵和m个骑兵要排成一排,其中连续的步兵不能超过k1个,连续的骑兵不能超过k2个. dp[i][ ...
- CodeForces - 468C Hack it!(构造+数位dp)
题目链接:点击查看 题目大意:求出一段区间 [l,r][l,r][l,r] 的数位和对 aaa 取模后为 000.更具体的,设 f(x)f(x)f(x) 为 xxx 的数位和,本题需要求出一对 [l, ...
- CodeForces - 1550E Stringforces(二分+状压dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...
- CodeForces - 1480D2 Painting the Array II(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最 小.对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]! ...
最新文章
- cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
- 1x pcie 速度_在主板规格上,x8在“1 x PCIe 3.0 x16(x8带宽)”中的含义是什么?...
- Install Mysql with SELinux on
- HDU-6290 奢侈的旅行 2018女赛 Dijkstra堆优化
- HDU 1010题解这是一道简单的DFS加回溯题,看懂后就会对递归和回溯有较深刻的理解。...
- linux之一些比较新但是常用的命令(expr ag tree cloc stat tmux axel)
- 斐波那契数列的递归与迭代写法比较
- 网站订单销售统计电商后台前端模板
- androidx.preference.PreferenceScreen 去除左边空白
- 内容创作费时费力?这款AI写作神器超给力!
- 改步数最新方法与工具,很好用
- 官宣 | 首届云原生编程挑战赛报名通道正式开启
- IIS允许下载APK安装包
- 第二十三章 宋桓公自行其是讨苦吃 齐桓公连克宋郑震东方
- matlab华侨大学,范文涛
- 给IDEA换个酷炫的主题,这个有点哇塞啊!
- Android 快捷方式 shortcuts 使用
- 全国省市数据 sql语句+json格式数据
- Pyhon 使用simpleCV包
- Photoshop2020绿色特别版