1 条题解
-
0
自动搬运
来自洛谷,原作者为

kradcigam
永不放弃之心,将成为贯穿逆境之光!搬运于
2025-08-24 22:19:00,当前版本为作者最后更新于2020-03-29 11:57:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Update 2021.8.4:修改了图1的错误,感谢balalida!
这道题目我一看到就想起了经典题——关路灯
但是时间好像不太好搞啊!
我们可以枚举时间qwq
考虑 维 表示 看了第 页到第 页,此时时间为 。
最后一维
-
如果是 就是在第 页。
-
如果是 就是在第 页。
为什么这样是对的?
我们会发现,首先为了最优 绝对不会刻意地去浪费时间,像这样

要往左走,一定会超过之前走到最左的点
要往右走,一定会超过之前走到最右的点
所以,我们可以开始转移了。
-
按照上面的结论 有 种可能
- 一种是

- 一种是

-
按照上面的结论 有 种可能
- 一种是

- 一种是

代码就很好写了:
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct node{ int x,v,t; }a[210]; ll f[210][210][510][2],n,ans;//不开long long见祖宗! bool cmp(node a,node b){ return a.x<b.x; } int work(int x,int y){//算能否get到快乐值 if(a[y].t>=x)return a[y].v; return 0; } int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].v>>a[i].t; n++;//这里的话,我来解释一下,首先有可能所有帖子的页面都>0或<0,zrl也可能只向左走或只向又走。 sort(a+1,a+n+1,cmp); for(int len=1;len<=n;len++) for(int i=1;i+len<=n;i++){ int j=i+len; if(a[i].x>0||a[j].x<0)continue; int x=min(abs(a[i].x),abs(a[j].x))+a[j].x-a[i].x; for(int t=x;t<=500;t++){ f[i][j][t][0]=max(f[i+1][j][max(t-(a[i+1].x-a[i].x),0)][0],f[i+1][j][max(t-(a[j].x-a[i].x),0)][1] )+work(t,i);//优美的转态转移方程。 f[i][j][t][1]=max(f[i][j-1][max(t-(a[j].x-a[i].x),0)][0],f[i][j-1][max(t-(a[j].x-a[j-1].x),0)][1] )+work(t,j); ans=max(ans,max(f[i][j][t][0],f[i][j][t][1]));//优美的转态转移方程。 } } cout<<ans;//输出 return 0; } -
- 1
信息
- ID
- 5260
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者