多重背包
有 n种物品 一共有 m大小的背包,每种物品的价值 大小 个数 为 s[i],v[i],num[i];
#include<bits/stdc++.h>//cmhao #define N 100000 using namespace std; int a[N]; int n,m,cut; int s[N],v[N]; void change(int tj,int jz,int sl) { int q=1,x,y; while(sl) { if(sl%2) { cut++; x=tj*q; y=jz*q; s[cut]=y; v[cut]=x; } q*=2; sl/=2; } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { int tj,jz,sl; scanf("%d%d%d",&tj,&jz,&sl); change(tj,jz,sl); } for(int i=1;i<=cut;i++) for(int j=m;j>=v[i];j--) a[j]=max(a[j],a[j-v[i]]+s[i]); printf("%d",a[m]); return 0; }