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

Dispwnl
**搬运于
2025-08-24 21:21:54,当前版本为作者最后更新于2017-10-22 17:32:47,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
一维数组f[high]=life
循环d~0
如果这个高度的生命值不小于这个垃圾丢下来的时间
如果 高度+这个垃圾的高度不小于d,就输出这个垃圾丢下来的时间
不然 这个高度+这个垃圾的高度 的生命值=max(d~0的生命值),即不吃垃圾用它来堆,此时高度+=这个垃圾的高度
这个高度的生命值+=吃这个垃圾增长的生命值,即吃垃圾,此时高度不变
最后输出高度为0的生命值,即出不去存活的最长时间
# include<iostream> # include<cstring> # include<algorithm> using namespace std; struct p{ int t,h,l; }c[101]; int d,g; int ti[101]; int f[101]; bool cmp(p a,p b) { return a.t<b.t; } int main() { cin>>d>>g; for(int i=1;i<=g;i++) cin>>c[i].t>>c[i].l>>c[i].h; sort(c+1,c+1+g,cmp); f[0]=10; for(int i=1;i<=g;i++) for(int j=d;j>=0;j--) if(f[j]>=c[i].t) { if(j+c[i].h>=d) { cout<<c[i].t; return 0; } f[j+c[i].h]=max(f[j+c[i].h],f[j]); f[j]+=c[i].l; } cout<<f[0]; return 0; }
- 1
信息
- ID
- 158
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者