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;
}
b【i】-abs(a【i】-x)

CodeForces - 372C Watching Fireworks is Fun dp相关推荐

  1. Codeforces 372 C. Watching Fireworks is Fun (单调队列优化dp)

    链接:C. Watching Fireworks is Fun 题意: 城镇中有 n 个位置,有 m 个烟花要放,每秒钟可以移动 d 长度的距离,每个烟花放出的地点和时间分别为 a[i] 和 t[i] ...

  2. Codeforces 148D. Bag of mice(概率dp)

    Codeforces 148D. Bag of mice(概率dp) Description The dragon and the princess are arguing about what to ...

  3. CodeForces - 372CWatching Fireworks is Fun+DP+单调队列优化

    [题目描述] CodeForces - 372CWatching Fireworks is Fun 题目的大概意思就是在一个编号为1-n的街道上现在按照时间顺序放烟花,每个烟花获得的幸福感为b−abs ...

  4. Codeforces 1276D/1259G Tree Elimination (树形DP)

    题目链接 http://codeforces.com/contest/1276/problem/D 题解 我什么DP都不会做,吃枣药丸-- 设\(f_{u,j}\)表示\(u\)子树内,\(j=0\) ...

  5. Codeforces 264B Good Sequences ★ (分解素因子+DP)

    题目链接:http://codeforces.com/problemset/problem/264/B 题目大意:给定一个数列a1,a2,a3,a4,--,an(数据保证ai严格递增,n<=10 ...

  6. Codeforces 118 D. Caesar's Legions (dp)

    题目链接:http://codeforces.com/contest/118/problem/D 有n个步兵和m个骑兵要排成一排,其中连续的步兵不能超过k1个,连续的骑兵不能超过k2个. dp[i][ ...

  7. CodeForces - 468C Hack it!(构造+数位dp)

    题目链接:点击查看 题目大意:求出一段区间 [l,r][l,r][l,r] 的数位和对 aaa 取模后为 000.更具体的,设 f(x)f(x)f(x) 为 xxx 的数位和,本题需要求出一对 [l, ...

  8. CodeForces - 1550E Stringforces(二分+状压dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...

  9. CodeForces - 1480D2 Painting the Array II(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最 小.对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]! ...

最新文章

  1. cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
  2. 1x pcie 速度_在主板规格上,x8在“1 x PCIe 3.0 x16(x8带宽)”中的含义是什么?...
  3. Install Mysql with SELinux on
  4. HDU-6290 奢侈的旅行 2018女赛 Dijkstra堆优化
  5. HDU 1010题解这是一道简单的DFS加回溯题,看懂后就会对递归和回溯有较深刻的理解。...
  6. linux之一些比较新但是常用的命令(expr ag tree cloc stat tmux axel)
  7. 斐波那契数列的递归与迭代写法比较
  8. 网站订单销售统计电商后台前端模板
  9. androidx.preference.PreferenceScreen 去除左边空白
  10. 内容创作费时费力?这款AI写作神器超给力!
  11. 改步数最新方法与工具,很好用
  12. 官宣 | 首届云原生编程挑战赛报名通道正式开启
  13. IIS允许下载APK安装包
  14. 第二十三章 宋桓公自行其是讨苦吃 齐桓公连克宋郑震东方
  15. matlab华侨大学,范文涛
  16. 给IDEA换个酷炫的主题,这个有点哇塞啊!
  17. Android 快捷方式 shortcuts 使用
  18. 全国省市数据 sql语句+json格式数据
  19. Pyhon 使用simpleCV包
  20. Photoshop2020绿色特别版

热门文章

  1. scrolltop 原生js_JS中完美兼容各大浏览器的scrolltop方法
  2. Arduino UNO + DS1302利用31字节静态RAM存储数据并串口打印
  3. TensorFlow 智能移动项目:11~12
  4. linux编译blas,科学网—Linux下安装blas和lapack包小记 - 徐博伦的博文
  5. centos7搭建nps实现内网穿透
  6. 一个月培养一个好习惯 个人提升
  7. DUNS 编号是否取代 FDA 注册编号?
  8. 查询公司的DUNS 邓白氏编码
  9. 【面试题】-java高级面试题汇总
  10. Java源码学习--00源码目录介绍