HDU 1114

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=100000;
int t,e,g,n;

int p[505],w[505];


int f[maxn];


int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&e,&g);
        int W=g-e;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&p[i],&w[i]);
        }
        for(int i=0;i<=W;i++)
            f[i]=1000000;
        f[0]=0;
         for(int i=0;i<n;i++)
         {
             for(int v=w[i];v<=W;v++)
             {
                 f[v]=min(f[v],f[v-w[i]]+p[i]);
             }
         }
         if(f[W]==1000000)
            printf("This is impossible.\n");
         else
         printf("The minimum amount of money in the piggy-bank is %d.\n",f[W]);

    }
    return 0;
}

这个题目还是可以的,,毕竟是背包问题啊,一个基础的DP啊,我通过这个还是学到了很多的,开始看了背包九讲,特别是在讲背包这个问题解决代码的优化的时候,还是非常厉害的啊
那个对于空间的优化,真的是很流弊的啊,可能有时候回碰到题目 就是来卡那个内存的吧。(新手小白的内心揣测),然后还是学到了很多的了,需要继续把背包九讲慢慢的磨完啊。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值