30分 三维背包求助

P1507 NASA的食物计划

有可能只取一个量。所以当小于 $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


|