链接:C. Watching Fireworks is Fun
题意:
城镇中有 n 个位置,有 m 个烟花要放,每秒钟可以移动 d 长度的距离,每个烟花放出的地点和时间分别为 a[i] 和 t[i] , 如果 在烟花放出时 你所在位置为 j 那么得到的快乐值为 b[i]-abs(j-a[i]) .问你能得到的最大快乐值是多少?
思路:

  1. 设 看第 i 次 烟花时所在位置为 j ,那么 转移方程为 dp[ i ][ j ]=max( dp[ i-1 ][ k ] + b[i] - abs( j - a[i] ) ) , k 的范围为 [ j -d*(t[i]-t[i-1]) , j + d *(t[i]-t[i-1]) ] .
  2. 那就等价于 对每一次 烟花 的每一个位置 j 我们都要求 长度为 2 * d * t[i] 区间内的最大值,那么问题又变成 求 滑动窗口内的 最大值。注意这里的窗口长度有左右两部分 。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
ll que[maxn],dp[5][maxn],a[maxn],b[maxn],t[maxn],ans=-1e18;
int main (){ios_base::sync_with_stdio(0); cin.tie(0);ll n,m,d;cin>>n>>m>>d;for(int i=1;i<=m;i++) cin>>a[i]>>b[i]>>t[i];for(int i=1;i<=n;i++){dp[0][i]=b[1]-abs(i-a[1]);}int v=1;for(int i=2;i<=m;i++){ll k=(t[i]-t[i-1])*d;if(k==0){for(int j=1;j<=n;j++){dp[v][j]=dp[1-v][j]-abs(j-a[i])+b[i];}v=1-v;continue;}int head=1,tail=1,x=1;for(int j=1;j<=n;j++){while(x<=n&&x-j<=k){        //右边界while(head!=tail&&dp[1-v][que[tail-1]]<=dp[1-v][x]) tail--;que[tail++]=x++;}while(head!=tail&&j-que[head]>k) head++; //左边界dp[v][j]=dp[1-v][que[head]]-abs(j-a[i])+b[i];}v=1-v;}for(int i=1;i<=n;i++) ans=max(ans,dp[1-v][i]);cout<<ans<<endl;
}

Codeforces 372 C. Watching Fireworks is Fun (单调队列优化dp)相关推荐

  1. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  2. poj 2373(单调队列优化dp)

    在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...

  3. poj 1821(单调队列优化dp)

    题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...

  4. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  5. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  6. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  7. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  8. 【单调队列优化DP】烽火传递 LibreOJ - 10180

    题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想.然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的 ...

  9. AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)

    AcWing 1089 烽火传递 单调队列优化DP,思路比较简单,维护一个保持元素单调递增的单调队列,队首就是第i座烽火台能接收到的,代价最小的方案,加上第i座烽火台的代价就是这座烽火台的最小值 #i ...

最新文章

  1. Eclipse中集成Tomcat
  2. Scanner类、Random类、ArrayList类
  3. vue-cli 3.0 使用全过程讲解
  4. 手动封装element-ui里面的button组件
  5. Socket网络编程【获取本机IP】
  6. Phoenix 关联查询异常 , MaxServerCacheSizeExceededException phoenix.query.maxServerCacheBytes
  7. NYOJ 擅长排列的小明 II---Problem B
  8. vivo X Fold屏幕规格揭晓:搭载2K/120Hz E5折叠屏幕
  9. dart语言中的常量与变量
  10. 哦?你会视频剪辑?是的。好,录用你!
  11. 根据IP地址获得地理位置
  12. 经典神经网络 -- RetinaNet的Focal_Loss : 设计原理与pytorch实现
  13. 难道我们就是那0.0000001%
  14. zbrush史上最全笔刷下载43G(1200个)
  15. DSP程序结构优化技巧
  16. 在c语言中temp的意思,temp
  17. 视频无法播放,视频打不开怎么办?可用这款视频修复工具快速修复
  18. html怎么做向下的图标,用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果
  19. 【导数术】12.极值点偏移与拐点偏移
  20. IntelliJ IDEA 项目相关的几个重要概念介绍

热门文章

  1. aspx html 转换 pdf,如何将ASPX文件转换为PDF文件?
  2. CSS动画——clip剪切动画
  3. Alchemy安装配置 FLASH AS3炼金术
  4. Blender骨骼动画快速教程
  5. 嵌入式Linux+Android学习路线图+学习进度
  6. 使用PS保存PDF为图片(JPG)
  7. 如何利用Python构建股票波动率因子模型?
  8. vs2017 增加平台集
  9. redis 槽点重新分配 集群_2019年校招,你经历了什么?
  10. 【饭谈】在学习测开网课之前,你的心脏需要武装一下