码迷,mamicode.com
首页 > 其他好文 > 详细

混合背包

时间:2020-01-28 21:32:34      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:==   ios   i++   ace   pac   混合   turn   一个   out   

 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

混合背包

标签:==   ios   i++   ace   pac   混合   turn   一个   out   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!