标签:
【题目大意】
给出一些纸币的面值和数量,问组成价值c最少需要多少张纸币?
1 /*dp[i][j]=mi(dp[i-1][j]≥0,即前i-1种数就能达到数字j) 2 3 =-1(j<ai 或者 dp[i][j-ai]≤0,即再加上一个第i种数也无法达到j 或者 当前和小于当前数) 4 5 =dp[i][j-ai]-1(可以达到的情况) 6 */ 7 #include<iostream> 8 #include<cstdio> 9 #include<cstring> 10 using namespace std; 11 const int MAXN=100; 12 int a[MAXN]; 13 int m[MAXN]; 14 int dp[100000+5]; 15 int n,k; 16 17 int main() 18 { 19 scanf("%d%d",&n,&k); 20 for (int i=1;i<=n;i++) scanf("%d",&a[i]); 21 for (int i=1;i<=n;i++) scanf("%d",&m[i]); 22 memset(dp,-1,sizeof(dp)); 23 dp[0]=0; 24 for (int i=1;i<=n;i++) 25 for (int j=0;j<=k;j++) 26 { 27 if (dp[j]>=0) dp[j]=m[i]; 28 else 29 { 30 if (j<a[i] || dp[j-a[i]]<=0) dp[j]=-1; 31 else dp[j]=dp[j-a[i]]-1; 32 } 33 } 34 printf("%d",n-dp[k]); 35 }
标签:
原文地址:http://www.cnblogs.com/iiyiyi/p/5743732.html