题目大意:多重背包
一大早就水了个题233
#include
#include
#include
#include
#define M 20200 using namespace std; int n,k,b[220],c[220]; int f[M]; int main() { int i,j,k; cin>>n; for(i=1;i<=n;i++) scanf("%d",&b[i]); for(i=1;i<=n;i++) scanf("%d",&c[i]); cin>>::k; memset(f,0x3f,sizeof f); f[0]=0; for(i=1;i<=n;i++) { for(j=1;j<=c[i];j<<=1) { for(k=::k;k>=b[i]*j;k--) f[k]=min(f[k],f[k-b[i]*j]+j); c[i]-=j; } if(!c[i]) continue; j=c[i]; for(k=::k;k>=b[i]*j;k--) f[k]=min(f[k],f[k-b[i]*j]+j); } cout<