榨取失败,求教

P1855 榨取kkksc03

二维背包解决 ```cpp for(int i=1;i<=n;i++) for(int j=m1;j>=w1[i];j--) for(int k=m2;k>=w2[i];k--) f[j][k]=max(f[j][k],f[j-w1[i]][k-w2[i]]+v[i]); ```
by nothingness @ 2018-06-13 07:24:01


然而这题是二维背包
by VenusM1nT @ 2018-06-13 08:30:36


@[Venus](/space/show?uid=23243) 我知道啊,我只是想记忆化搜索实现,这个代码已经拿到80分了,[我的代码](https://www.luogu.org/record/show?rid=7820451)
by xiangling @ 2018-06-13 11:47:24


@[nothingness](/space/show?uid=31317)
by xiangling @ 2018-06-13 11:47:44


@[rainman](/space/show?uid=55804) ~~你榨取了我一点时间,让我帮站长大人满足你一个AC的愿望...(手动滑稽)~~ AC代码: ```cpp #include "bits/stdc++.h" using namespace std; int n,W,V,w[201],v[201],f[101][201][201]; int dfs(int x,int y,int z) { if(f[x][y][z]) return f[x][y][z]; if(x>0) if(y>=w[x]&&z>=v[x]) f[x][y][z]=max(dfs(x-1,y,z),dfs(x-1,y-w[x],z-v[x])+1); else f[x][y][z]=dfs(x-1,y,z); return f[x][y][z]; } int main() { scanf("%d%d%d",&n,&W,&V); for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&v[i]); printf("%d",dfs(n,W,V)); return 0; } ```
by nothingness @ 2018-06-13 12:24:13


@[rainman](/space/show?uid=55804) ```cpp if((!i)||m<=0||t<=0){ //f[i][m][t]=0; return 0; } ``` 你这里有问题 当 ${(i>0}$&&${0<m<mi[i]}$&&${0<t<ti[i])}$ 时就会出错
by nothingness @ 2018-06-13 12:38:57


@[nothingness](/space/show?uid=31317) 感谢
by xiangling @ 2018-06-13 13:42:14


|