luogu P1156 垃圾陷阱
动态规划
没错f[i][j]表示第i个时刻还有j的生命值能叠的最大值
好写但垃圾
所以滚!
std:
#include<bits/stdc++.h>
using namespace std;
struct Trbs{
int t;//投放的时间
int tim;//维持的时间
int h;//高度
}s[101];
int m,n;
int f[101];//f[i]表示高度为i,它最多还能活多久
bool cmp(Trbs x,Trbs y){//cmp比较
return x.t<y.t;
}
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&s[i].t,&s[i].tim,&s[i].h);
}
sort(s+1,s+n+1,cmp);//按时间排下序
f[0]=10;
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
if(f[j]>=s[i].t){
if(j+s[i].h>=m){//都找到答案了
printf("%d\n",s[i].t);//输出呗
return 0;
}
f[j+s[i].h]=max(f[j+s[i].h],f[j]);//把它往上叠
f[j]+=s[i].tim;//把它吃掉
}
}
}
printf("%d\n",f[0]);//逃不出去?输出最多能活多久
return 0;
}