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) 编辑 收藏 举报