求助,为什么不能用dp[j]表示寿命为j时到达的最高高度?

P1156 垃圾陷阱

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


|