hdu1114小猪抢劫银行

 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1114

完全背包

题意:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量,要求出重量最少能装满钱罐时的最大价值


 

#include <string.h>

#include <stdio.h>

#include <algorithm>

#include <iostream>

using namespace std;



int f[1000005];



int min(int a,int b)

{

	if(a<b)return a;

	else return b;

}



int main()

{  

    int w1,w2,w,t;

    int n,val[505],wei[505],i,j;

    scanf("%d",&t);

    while(t--)

    {

        cin>>w1>>w2;

        w=w2-w1;       //必须减去小猪本身重量

        scanf("%d",&n);

        for(i = 0;i<n;i++)

        scanf("%d%d",&val[i],&wei[i]);

        for(i = 0;i<=w;i++)

        {

            f[i] = 10000000;       //因为要求小的,所以dp数组必须存大数

        }

        f[0]=0;

        for(i=0;i<n;i++)

        {

            for(j=wei[i];j<=w;j++)

            {

                f[j]=min(f[j],f[j-wei[i]]+val[i]);

            }

        }

        if(f[w] == 10000000)

        cout<<"This is impossible."<<endl;

        else

        cout<<"The minimum amount of money in the piggy-bank is "<<f[w]<<"."<<endl;

    }

    return 0;

}

hdu1114小猪抢劫银行

 

 

你可能感兴趣的:(HDU)