思路

根据题意可以得到dp转移方程是 \(f_{i,j}=\max\{f_{i-1,k}+b_i-|a_i-j|\}\)

而且 \(j-(t_{i}-t_{i-1})\times d\le k\le j+(t_{i}-t_{i-1})\times d\)

显然直接转移会超时

考虑用单调队列优化,优化的时候要注意相邻两个状态的左右区间要保持非下降的关系

代码

//                  ξ†(ᗜ ˰ ᗜ)†ξ
// 去吧,鸭鸭,把希儿和AC都带回来!
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 2e5 + 5;
int dp[2][N];
int q[N];
int a[305],b[305],t[305];
int n,m,d;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
inline void print(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
print(x/10);
putchar(x%10+'0');
}
void solve(){
int flag = 1;
for(int i = 1; i <= m; i++){
int l = 1,r = 0,k = 1;
for(int j = 1; j <= n; j++){ for(;k <= min(n,j + (t[i] - t[i-1]) * d);k++){
while(l <= r && dp[flag^1][q[r]] <= dp[flag^1][k]) r--;
q[++r] = k;
}
while(l <= r && q[l] < max((long long)1,j - (t[i]-t[i-1])*d)) l++;
dp[flag][j] = dp[flag^1][q[l]] + b[i] - abs(a[i] - j); }
flag ^= 1;
}
int ans = -1e18;
for(int i = 1; i <= n; i++) ans = max(ans,dp[flag^1][i]);
cout << ans << endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> d;
for(int i = 1; i <= m; i++) cin >> a[i] >> b[i] >> t[i];
solve();
return 0;
}
//题目所考察知识:
//心得体会:

CF372C的更多相关文章

  1. 【简洁易懂】CF372C Watching Fireworks is Fun dp + 单调队列优化 dp优化 ACM codeforces

    题目大意 一条街道有$n$个区域. 从左到右编号为$1$到$n$. 相邻区域之间的距离为$1$. 在节日期间,有$m$次烟花要燃放. 第$i$次烟花燃放区域为$a_i$ ,幸福属性为$b_i$,时间为 ...

  2. CF372C Watching Fireworks is Fun(单调队列优化DP)

    A festival will be held in a town's main street. There are n sections in the main street. The sectio ...

  3. 【单调队列优化】[CF372C] Watching Fireworks is Fun

    突然发现我可能单调队列都打不来了...我太菜了... 这道题显然有$$f[i][j]=min\{f[i-1][k]+\vert j-a[i] \vert\}$$ 则$ans=\sum_{i=1}^{m ...

  4. 题解-------CF372C Watching Fireworks is Fun

    传送门 一道有趣的DP 题目大意 城镇中有$n$个位置,有$m$个烟花要放.第$i$个烟花放出的时间记为$t_{i}$,放出的位置记为$a_{i}$.如果烟花放出的时候,你处在位置$x$,那么你将收获 ...

  5. 单调队列+线性dp题Watching Fireworks is Fun (CF372C)

    一.Watching Fireworks is Fun(紫题) 题目:一个城镇有n个区域,从左到右1编号为n,每个区域之间距离1个单位距离节日中有m个烟火要放,给定放的地点ai,时间ti当时你在x,那 ...

  6. DP 优化方法合集

    0. 前言 写完这篇文章后发现自己对于 DP 的优化一窍不通,所以补了补 DP 的一些优化,写篇 blog 总结一下. 1. 单调队列/单调栈优化 1.2 算法介绍 这应该算是最基础的 DP 优化方法 ...

随机推荐

  1. 已经调试成功的Protues工程用了一段时间后不能用的问题

    已经调试成功的Protues工程,经过一段时间后不能用的问题 主要现象:(1)可以打开,运行时没有效果:(2)可以打开,运行时闪退 解决办法:(1)删除原ARM芯片:(2)重新找到ARM芯片,重新加载 ...

  2. 通过 OpenAPI 部署 Npcf_PolicyAuthorization-PostAppSessions API Service

    目录 文章目录 目录 OpenAPI 部署步骤 OpenAPI 官方网站:https://github.com/OAI/OpenAPI-Specification 支持通过标准的 yaml 文件来生成 ...

  3. nginx源码安装步骤

    1.安装依赖包 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install ...

  4. JS+DOM简要笔记

    js官方文档: https://www.w3school.com.cn/js/index.asp 简单理解:html是内容,css是控制样式,js是行为. 1,js弱类型特点 JavaScript 是 ...

  5. Python 潮流周刊#53:我辈楷模,一个约见诺奖得主,一个成为核心开发者

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  6. ftp和tftp有什么区别

    TFTP和FTP都是文件传输协议,但它们在很多方面存在明显的区别. 安全性:FTP协议使用的是明文传输,而TFTP协议使用的是UDP协议,没有使用TCP,所以不提供验证. 传输方式:FTP协议使用的是 ...

  7. 讲课 PPT 公开啦

    目前限于时间原因,只在 Github Pages 上托管了. 之后有时间会托管到 pythonanywhere 上,因为 Github Pages 是在太慢了.

  8. 算法学习笔记(46): 离散余弦变换(DCT)

    前置知识:离散傅里叶变换 傅里叶变换在上文中更多的是 OI 中的理解以及应用.但是傅里叶变换奥秘还很多. 回顾 \(\omega_n\) 在傅里叶变换中的定义:\(e^{i \frac {2\pi} ...

  9. kettle从入门到精通 第二十二课 kettle carte web服务中文乱码

    在windows 上面 carte服务的canvas画布展示的中文正常,但是在linux上面中文展示乱码,如下所示: 原因:linux 机器缺少字体所致. kettle源码中使用字体: 解决方法: 安 ...

  10. C++中 符号的优先级

    符号 运算顺序 :: 从左至右 a++ a-- type() type{} a() a[] . -> 从左至右 ! ~ ++a --a +a -a (type) sizeof &a *a ...