hdu1114Piggy-Bank (完全背包)

78 阅读1分钟

题意:

给定存钱罐的重量,存钱之后的重量,,货币价值及重量。求存钱罐里面最少有多少钱。

思路:

跟完全背包求最大值差不多,不同的是,背包要刚好装满还有dp的数组初始化要为正无穷。

#include<iostream>
#include<cstdio>
#include<algorithm> 
using namespace std;
int dp[10010];
int w[10010],v[10010];
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int st,en,n,co,value,weight;
			scanf("%d%d%d",&st,&en,&co);
		n=en-st;
		for(int i=1;i<=co;i++){
			scanf("%d%d",&v[i],&w[i]);
		}
		for(int i=1;i<=n;i++)
			dp[i]=1e9;
		dp[0]=0;
		for(int i=1;i<=co;i++){
			for(int j=w[i];j<=n;j++)
			dp[j]=min(dp[j],dp[j-w[i]]+v[i]);
		}
		if(dp[n]==1e9) printf("This is impossible.\n");
		else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[n]);
	}
	
	return 0;}


\