POJ 1742 多重背包
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; int a[101],c[101]; int num[100001],f[100001]; int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { if(n==0&&m==0) break; int sum=0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&c[i]); memset(f,0,sizeof(f)); f[0]=1; for(int i=1;i<=n;i++) { memset(num,0,sizeof(num)); for(int j=a[i];j<=m;j++) { if(!f[j]&&f[j-a[i]]&&num[j-a[i]]<c[i]) { num[j]=num[j-a[i]]+1; sum++; f[j]=1; } } } printf("%d\n",sum); } return 0; }
posted on 2011-04-22 22:27 Yiner 閱讀(209) 評論(0) 編輯 收藏 引用 所屬分類: DP