乐。
by xs_siqi @ 2022-09-24 21:47:14
首先你这dp数组的注释都反了。
并且:
题目要求的是新鲜程度大于f,你这是新鲜程度为f能选几个。题目要求大于等于你搁这小于等于。方程都错了
by xs_siqi @ 2022-09-24 21:49:34
还有那行
`ans[i][j]=max(ans[i-1][j],dp[i][k]);`
一直对前面取最值我是真的没意料到。。
难道不是`ans[i][j]=ans[i-1][j]`,然后对`ans[i][j]`取最值吗
by xs_siqi @ 2022-09-24 21:51:10
总结:没审题,并且一直对前面取最值颠覆了我对dp的认知。
by xs_siqi @ 2022-09-24 21:53:59
笑,终于发现一个和我一样把新鲜程度大于看成小于等于的
by ETO_leader @ 2022-09-25 08:19:34
@[ETO_leader](/user/388691)
乐,我也是
by _JF_ @ 2022-09-25 09:19:42
```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
int n,q,w[505],v[505],f[505][505],be[505];
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++) scanf("%d%d%d",&w[i],&be[i],&v[i]);
for(int i=1;i<=n;i++){
for(int j=500;j>=w[i];j--){
for(int k=500;k>=0;k--){
if(be[i]>=k) f[j][k]=max(f[j][k],f[j-w[i]][0]+v[i]);
else if(f[j-w[i]][k-be[i]]) f[j][k]=max(f[j][k],f[j-w[i]][k-be[i]]+v[i]);
}
}
}
while(q--){
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",f[x][y]);
}
return 0;
}
```
by Xyh110126 @ 2022-09-26 17:48:30