HDU 1114 Piggy-Bank【完全背包】

题意: 有个储蓄罐 ,内部物品重量已知,内部可能有 n 种钱币,知道每个钱币的重量和价值,问储蓄罐内部钱币价值最少是多少。

分析: 完全背包,由于是最小价值,所以应把 数组初始为无穷大。

#include<stdio.h>
#include<string.h>
int f[10005];
int min(int a,int b)
{ return a<b?a:b;  }
int main()
{
    int t,i,n,v,emp,a,b;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&emp,&v);
        v-=emp;
        f[0]=0;
        for(i=1;i<=v;i++)
            f[i]=999999;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d%d",&a,&b);
            for(i=b;i<=v;i++)
                f[i]=min(f[i-b]+a,f[i]);
        }
        if(f[v]==999999)
            printf("This is impossible.\n");
        else printf("The minimum amount of money in the piggy-bank is %d.\n",f[v]);
    }
    return 0;
}

 

posted @ 2012-07-27 19:34  'wind  阅读(191)  评论(0编辑  收藏  举报