hdu 1114 Piggy-Bank

一句话,完全背包问题。

状态转移方程:

if(dp[j-w[i]]+p[i]<dp[j])
     dp[j]=dp[j-w[i]]+p[i];

#include<stdio.h>
#define MAX_NUM 10000000
#define NUM 10005
int dp[NUM],p[NUM],w[NUM];
int main()
{
	int cases,e,f,n;
	int i,j,v;
	freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
	scanf("%d",&cases);
	while(cases--){
		scanf("%d%d%d",&e,&f,&n);
		for(i=0;i<n;i++)
		{
			scanf("%d%d",&p[i],&w[i]);
		}
		v=f-e;//总空间
		for(i=1;i<=v;i++)
			dp[i]=MAX_NUM;
		for(i=0;i<n;i++)
			for(j=w[i];j<=v;j++){
				if(dp[j-w[i]]+p[i]<dp[j])
					dp[j]=dp[j-w[i]]+p[i];
			}
		if(dp[v]==MAX_NUM)
			printf("This is impossible.\n");
		else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[v]);
	}
	return 0;
}


 

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