poj 1384 完全背包

完全背包,注意初始化的细节dp【0】=0;

这道题要求的是恰好装满背包的最小的价值,所以初始状态下,只有dp[0]满足条件,即容量为0的背包可能被价值为0的东西(即木有东西)装满背包,其他容量的背包均没有合法解,都是无穷大,之所以是恰好装满是因为贮蓄罐的增重是一定的

#include<stdio.h>
#include<string.h>
int dp[10000];
int w[505],v[505];
int min(int a,int b){return a<b?a:b;}
int main(){
	int t,e,f,i,j,k,n;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&e,&f);
		scanf("%d",&n);
		for(i=1;i<=n;i++)
			scanf("%d%d",&v[i],&w[i]);
		int V=f-e;
		for(i=1;i<=V;i++) dp[i]=10000000; 
		dp[0]=0;
		for(i=1;i<=n;i++){
			for(j=0;j<=V;j++){
				if(j>=w[i])
					dp[j]=min(dp[j-w[i]]+v[i],dp[j]);
			}
		}
		if(dp[V]!=10000000)
			printf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]);
		else printf("This is impossible.\n");
	}
}

  

posted @ 2011-11-19 15:53  Because Of You  Views(848)  Comments(1Edit  收藏  举报