首页 > 其他 > 详细

混合背包

时间:2020-01-28 20:24:34      阅读:58      评论:0      收藏:0      [点我收藏+]
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int m,n,w[31],c[31],p[31],f[201];
 5 int main(){
 6     cin>>m>>n;
 7     for(int i=1;i<=n;i++) cin>>w[i]>>c[i]>>p[i];
 8     for(int i=1;i<=n;i++)
 9         if(p[i]==0)
10             for(int j=w[i];j<=m;j++)
11                 f[j]=max(f[j],f[j-w[i]]+c[i]); 
12         else for(int j=1;j<=p[i];j++)
13             for(int k=m;k>=w[i];k--)
14                 f[k]=max(f[k],f[k-w[i]]+c[i]);
15     cout<<f[m];
16     return 0;
17 } 

混合背包其实就是吧01背包,完全背包,多重背包合在一起,

只需要加一个特判,

01背包时倒着循环,

否则正着循环,

我太蒻了qwq

混合背包

原文:https://www.cnblogs.com/sxy2004/p/12238652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!