emmm我就是这样写的,wa了2和10两个点,现在在查错。
by Starbringer @ 2018-10-16 23:17:12
就剩第二个点了。
by Starbringer @ 2018-10-16 23:51:53
```cpp
#include<bits/stdc++.h>
using namespace std;
const int MAXN=3000;
int f[120][3020];
struct node{
int t,h,e;
}rub[120];
bool cmp(node x,node y)
{
return x.t<y.t;
}
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>rub[i].t>>rub[i].e>>rub[i].h;
rub[0].t=0,rub[0].e=0,rub[0].h=0;
sort(rub+1,rub+m+1,cmp);
for(int i=0;i<=m;i++)
for(int j=0;j<=MAXN;j++)
f[i][j]=-1;
f[0][10]=0;
for(int i=1;i<=m;i++)
{
for(int j=0;j<=MAXN;j++)
{
if(f[i-1][j]==-1) continue;
int x=j+rub[i-1].t-rub[i].t;
if(x<0) continue;
f[i][x]=max(f[i][x],rub[i].h+f[i-1][j]);
if(f[i][x]>=n){
cout<<rub[i].t<<endl;
return 0;
}
int y=x+rub[i].e;
if(y<=MAXN)
{
f[i][y]=max(f[i-1][j],f[i][y]);
}
}
}
int ans=10;
for(int i=1;i<=m;i++)
{
if(ans<rub[i].t) break;
ans+=rub[i].e;
}
cout<<ans;
}
```
过了,f[i][j]表示寿命的代码
i表示第i个食物 j表示生命
by Starbringer @ 2018-10-17 00:06:45