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