#include<bits/stdc++.h>
using namespace std;
const int M = 5010;
const int N = 110;
struct rubbish {
int t,f,h;
} r[N];
int n,m;
int dp[N][M];
bool cmp(rubbish r1,rubbish r2) {
return r1.t < r2.t;
}
int main() {
scanf("%d%d",&n,&m);
int alive = 10,maxF = 10;
for(int i=1;i<=m;i++) {
scanf("%d%d%d",&r[i].t,&r[i].f,&r[i].h);
if(alive >= r[i].t) {
alive += r[i].f;
} maxF += r[i].f;
}
sort(r+1,r+m+1,cmp);
memset(dp,-1,sizeof(dp));
dp[0][10] = 0;
for(int i=1;i<=m;i++) {
for(int j=r[i].t;j<=maxF;j++) {
if(dp[i-1][j] != -1) {
dp[i][j] = max(dp[i-1][j] + r[i].h,dp[i][j]);
}
if(j-r[i].f >= r[i].t && dp[i-1][j-r[i].f] != -1) {
dp[i][j] = max(dp[i-1][j-r[i].f],dp[i][j]);
}
if(dp[i][j] >= n) {
printf("%d\n",r[i].t);
return 0;
}
}
} printf("%d\n",alive);
return 0;
}
主要是状态跟题解设的不一样 dp[i][j]表示第i件垃圾,此时可以存活j小时 最多可以达到的高度
这里主要想问一下我这个思路可不可以实现? 如果不能的话各位麻烦各位dalao帮忙讲下原因