混合背包

Posted sxy2004

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混合背包相关的知识,希望对你有一定的参考价值。

 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

以上是关于混合背包的主要内容,如果未能解决你的问题,请参考以下文章

AC_7混合背包问题

codevs 3269 混合背包(复习混合背包)

混合背包(背包03)

混合背包问题

动态规划/背包问题背包问题第一阶段最终章:混合背包问题

动态规划/背包问题背包问题第一阶段最终章:混合背包问题