标签:
思路:很显然,这明显就是一个完全背包。但是这里唯一要注意的地方就是在初始化的时候,因为我们要完全填满储蓄罐,所以初始化dp[0]=0; 然后又因为我们要求的是所需零钱价值最少的情况,所以其余的都得初始化为正无穷。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <math.h> 5 #include <algorithm> 6 #include <iostream> 7 using namespace std; 8 int dp[10000]; 9 int v[10000]; 10 int w[10000]; 11 12 int main() 13 { 14 int t,i,j,n,V,k; 15 scanf("%d",&t); 16 while(t--){ 17 scanf("%d%d",&k,&V); 18 V=V-k; 19 for(i=1;i<=V;++i) 20 dp[i]=9999999; 21 scanf("%d",&n); 22 for(i=1;i<=n;i++) 23 scanf("%d %d",&v[i],&w[i]); 24 for(i=1;i<=n;i++){ 25 for(j=w[i];j<=V;j++){ 26 dp[j]=min(dp[j],dp[j-w[i]]+v[i]); 27 } 28 } 29 if(dp[V]==9999999) printf("This is impossible.\n"); 30 else 31 { 32 printf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]); 33 } 34 } 35 return 0; 36 }
标签:
原文地址:http://www.cnblogs.com/wangmengmeng/p/4833390.html