标签:
Time Limit: 3000MS | Memory Limit: 30000K | |
Total Submissions: 34632 | Accepted: 11754 |
Description
Input
Output
Sample Input
3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0
Sample Output
8
4
Source
普通的多重背包问题
1 /**/ 2 #include<iostream> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 const int mxn=200000; 9 int n,m; 10 int a[mxn],c[mxn]; 11 int sum[mxn]; 12 bool flag[mxn*10]; 13 int main(){ 14 while(scanf("%d%d",&n,&m) && n && m){ 15 memset(flag,0,sizeof flag); 16 int ans=0; 17 flag[0]=1; 18 int i,j; 19 for(i=1;i<=n;i++)scanf("%d",&a[i]); 20 for(i=1;i<=n;i++)scanf("%d",&c[i]); 21 for(i=1;i<=n;i++){ 22 memset(sum,0,sizeof sum); 23 for(j=a[i];j<=m;j++){ 24 if(!flag[j] && flag[j-a[i]] && sum[j-a[i]]<c[i]){ 25 ans++; 26 flag[j]=1;//该价格已经组合出 27 sum[j]=sum[j-a[i]]+1; 28 } 29 } 30 } 31 printf("%d\n",ans); 32 } 33 return 0; 34 }
标签:
原文地址:http://www.cnblogs.com/SilverNebula/p/5734336.html