多重背包优化
#include<iostream> #include<cstring> using namespace std; int c[100005],d[100005]; int main() { int n,m,a[105],b[105],k; while(cin>>n>>m) { k=0; if(n==0&&m==0) break; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) cin>>b[i]; memset(c,0,sizeof(c)); c[0]=1; for(int i=0;i<n;i++) { memset(d,0,sizeof(d)); for(int j=a[i];j<=m;j++) { if(!c[j]&&c[j-a[i]]&&d[j-a[i]]<b[i]) { c[j]=1; d[j]=d[j-a[i]]+1; k++; } } } cout<<k<<endl; } }