背包 0 分求助,悬赏一关注

P8548 小挖的买花

乐。
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


|