HDU 1114 Piggy-Bank(完全背包)

来源:互联网 发布:艺术家 知乎 编辑:程序博客网 时间:2024/05/29 18:22
/*背包dpF - Piggy-Bank时间: 2017/02/20题意:装满背包,但要求价值最低的完全背包题解:dp[i][j] 表示在背包大小为j中装前i个物品最优的价值*/#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<map>using namespace std;#define N 1010#define INF 0x3f3f3f3fint num[10001],w[500],v[500];int main(){    int n,m,e,f,t;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&e,&f);        m=f-e;        scanf("%d",&n);        for(int i=0;i<n;i++)            scanf("%d%d",&v[i],&w[i]);        num[0] = 0;        for(int i=1;i<=m;i++)            num[i] = -1;        for(int i=0;i<n;i++)        {            for(int j=w[i];j<=m;j++)            {                if(num[j-w[i]]!=-1 && num[j]!=-1)                {                    if(num[j-w[i]]+v[i]<num[j])                        num[j]=num[j-w[i]]+v[i];                }                else if(num[j-w[i]]!=-1 && num[j]==-1)                    num[j]=num[j-w[i]]+v[i];            }        }        if(num[m]!=-1)            printf("The minimum amount of money in the piggy-bank is %d.\n",num[m]);        else            printf("This is impossible.\n");    }}


0 0