二维背包解决
```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