hdu 1114 Piggy-Bank--DP

/*
	完全背包问题,且要求正好装满,求最小值(可以初始化为正无穷)
	公式是:f[j]=min(f[j],f[j-qian[i].c]+qian[i].w);
*/
#include<stdio.h>
struct node
{
	int c,w;//c是花费的资源,本题中指重量;w是带来的价值,本题中是面值
}qian[600];
int f[10100];
int main()
{
	int t,a,b,i,j;
	scanf("%d",&t);
	f[0]=0;
	while(t--)
	{
		scanf("%d%d",&a,&b);
		a=b-a;
		scanf("%d",&b);
		for(i=0;i<b;i++)
			scanf("%d%d",&qian[i].w,&qian[i].c);
		for(i=1;i<=a;i++)
			f[i]=999999999;//赋初值
		for(i=0;i<b;i++)
			for(j=qian[i].c;j<=a;j++)
			{
				int d=f[j-qian[i].c]+qian[i].w;
				if(d<f[j])
					f[j]=d;
			}
		if(f[a]!=999999999) printf("The minimum amount of money in the piggy-bank is %d.\n",f[a]);
		else printf("This is impossible.\n");
	}
	return 0;
}

你可能感兴趣的:(hdu 1114 Piggy-Bank--DP)