/*
背包dp
F - 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 0x3f3f3f3f
int 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");
}
}
【完全背包】HDU 1114 Piggy-Bank
最新推荐文章于 2024-02-20 14:49:35 发布