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

相关文章:

  • 2022-12-23
  • 2022-02-04
  • 2021-11-25
  • 2022-12-23
  • 2022-03-05
  • 2021-10-22
  • 2021-11-16
  • 2021-12-19
猜你喜欢
  • 2022-12-23
  • 2021-07-22
  • 2022-12-23
  • 2021-05-31
  • 2021-12-21
  • 2022-12-23
相关资源
相似解决方案