1 条题解
-
0
还是背包的板子 其实混合背包就是把01,完全,多重三种背包混合到一起的, 所以我们要找到一种方法将01与多重合并起来(完全背包可以分开算), 那么如果p【i】=0,也就是完全背包,直接用完全背包的模板算即可,如果是01,把它看成多重背包一起算就可以了 那么代码如下
#include<bits/stdc++.h> using namespace std; int w[101],c[101],p[101]; int f[5001],n,m; int main() { scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&w[i],&c[i],&p[i]); } for(int i=1;i<=n;i++) { if(p[i]==0) { for(int v=w[i];v<=m;v++) { f[v]=max(f[v],f[v-w[i]]+c[i]); } } else for(int k=1;k<=p[i];k++) { for(int v=m;v>=w[i];v--) f[v]=max(f[v],f[v-w[i]]+c[i]); } } cout<<f[m]; return 0; }
- 1
信息
- ID
- 466
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 67
- 已通过
- 27
- 上传者