POJ 1384

求猜存钱罐中至少有多少钱。容易知道金币总的重量,接着背包。

#include<cstdio>
#include<iostream>
using namespace std;
#define N 10010
#define M 100000000


int dp[N];
int val[501],we[501];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int em,fu;
        scanf("%d%d",&em,&fu);
        int n;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
            scanf("%d%d",&val[i],&we[i]);
        int ff=fu-em;
        for(int i=0; i<=ff; i++)
            dp[i]=M;
        dp[0]=0;

        for(int i=0; i<n; i++)
        {
            for(int j=we[i]; j<=ff; j++)
                dp[j]=min(dp[j],dp[j-we[i]]+val[i]);
        }
        if(dp[ff] ==M)printf("This is impossible.\n");
        else printf("The minimum amount of money in the piggy-bank is %d.\n", dp[ff]);

    }
    return 0;
}

 

posted @ 2014-04-04 11:59  霖‘  阅读(115)  评论(0编辑  收藏  举报