有可能只取一个量。所以当小于 $v_i$ $m_i$ 时应传承上一次的值。
by xs_siqi @ 2022-09-27 21:21:39
二维不写的原因是即使你不写这条,原来的dp数组也不会被覆盖,直接被传承到下一次了
by xs_siqi @ 2022-09-27 21:24:47
@[xs_siqi](/user/401088)
大致明白,但是我尝试作了这样的处理,依旧无济于事,是我的理解出现偏差了吗…
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,VM,MM,v[55],m[55],w[55],dp[55][405][405];
int main(){
cin>>VM>>MM>>n;
for(register int i=1;i<=n;++i)cin>>v[i]>>m[i]>>w[i];
for(register int i=1;i<=n;++i){
for(register int j=1;j<v[i];++j)
for(register int k=1;k<m[i];++k)
dp[i][j][k]=dp[i-1][j][k];
for(register int j=v[i];j<=VM;++j)
for(register int k=m[i];k<=MM;++k)
dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-v[i]][k-m[i]]+w[i]);
}
cout<<dp[n][VM][MM]<<endl;
}
```
by RTSK @ 2022-09-27 21:25:45
@[cxy_](/user/209196) 有没有一种可能,jk都要从0开始枚举。。
jk不是代表两个量剩余空间吗。显然能为0吧
另外只要一个量不满足就必须传承上一次。你写的是两个量都不满足才传承上一次
by xs_siqi @ 2022-09-27 21:36:39
@[xs_siqi](/user/401088)
明白了,感谢
by RTSK @ 2022-09-27 21:40:06