HDU 1114 Piggy-Bank

 

题意:给出一个储钱罐的初始重量(E)和装满后的重量(F),有N种硬币,分别为价值P和重量W。问如何选择硬币使得储钱罐中的硬币总价值最小。

 

此题是一个完全背包问题,且要求储钱罐必须装满,所以初始化时要注意。状态转移方程:f[i]=min(f[i],f[i-w]+p)。

 

AC代码:

 1 #include<stdio.h>
 2 #define INF 0xfffffff
 3 
 4 int f[10005];
 5 
 6 int min(int a,int b){
 7     return a<b?a:b;
 8 }
 9 
10 int main()
11 {
12     int E,F,i,j,m,n,p,w,t;
13     scanf("%d",&t);
14     while(t--){
15         scanf("%d %d",&E,&F);
16         m=F-E;
17         f[0]=0;
18         for(i=1;i<=m;i++)
19             f[i]=INF;
20         scanf("%d",&n);
21         for(i=0;i<n;i++){
22             scanf("%d %d",&p,&w);
23             for(j=w;j<=m;j++)
24                 f[j]=min(f[j],f[j-w]+p);
25         }
26         if(f[m]==INF) printf("This is impossible.\n");
27         else          printf("The minimum amount of money in the piggy-bank is %d.\n",f[m]);
28     }
29     return 0;
30 }

 

posted on 2013-02-28 19:45  Acmer_Roney  阅读(266)  评论(0编辑  收藏  举报

导航