HDU1114 完全背包 xingxing在努力

  定义 f[j]为重量为j的时候的最小钱数,然后更新即可。。代码如下:

  

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 10000 + 100;
const int inf = 0x3f3f3f3f;

int E, F, N;
struct Wu
{
    int p, w;
}wu[500 + 10];

int f[maxn];           //重量为j的时候的最小价钱

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d%d", &E, &F, &N);
        for(int i=0; i<N; i++)
            scanf("%d%d", &wu[i].p, &wu[i].w);
        memset(f, 0x3f, sizeof(f));
        int c = F-E;
        f[0] = 0;
        for(int i=0; i<N; i++)
        {
            for(int j=wu[i].w; j<=c; j++)
            {
                if(f[j]>f[j-wu[i].w]+wu[i].p && f[j-wu[i].w]!=inf)
                    f[j] = f[j-wu[i].w] + wu[i].p;
            }
        }
        if(f[c] == inf)
            printf("This is impossible.\n");
        else 
            printf("The minimum amount of money in the piggy-bank is %d.\n", f[c]);
    }
    return 0;
}

 

posted @ 2015-12-01 19:14  xing-xing  阅读(108)  评论(0编辑  收藏  举报