HDOJ 1114 Piggy-Bank

    题目:HDOJ 1114

    该题属于完全背包问题,答案应满足:1、背包被放满,2、符合条件的最小值。因此将动规数组的初始值设为99999999(超过题设最大值)。

    状态转移方程为:v[i][j]=min{v[i-1][j],v[i][j-w[i]]+p[i]}。

    最后,如果动规数组最后一格数据不等于初始值,即为答案。

    本题代码:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int t,e,f,n,p[510],w[510],v[10010],l,i,j,ans;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&e,&f);
        l=f-e;
        for(i=1;i<=l;i++)
            v[i]=99999999;
        v[0]=0;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d%d",&p[i],&w[i]);
        for(i=1;i<=n;i++)
        {
            for(j=w[i];j<=l;j++)
            {
                if(v[j-w[i]]<99999999)
                {
                    if(v[j-w[i]]+p[i]<v[j])
                        v[j]=v[j-w[i]]+p[i];
                }
            }
        }
        if(v[l]<99999999)
            printf("The minimum amount of money in the piggy-bank is %d.\n",v[l]);
        else
            printf("This is impossible.\n");
    } 
    return 0;
}
posted @ 2012-05-10 19:31  任琦磊  阅读(370)  评论(0编辑  收藏  举报