Piggy-Bank HDU - 1114

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Piggy-Bank HDU - 1114相关的知识,希望对你有一定的参考价值。

Piggy-Bank HDU - 1114

题意:

小猪储钱罐存在一个大的问题,即无法确定其中有多少钱。因此,我们可能在打碎小猪储钱罐之后,发现里面的钱不够。显然,我们希望避免这种不愉快的情况。唯一的可能是,称一下小猪储钱罐的重量,并尝试猜测里面的有多少硬币。假定我们能够精确判断小猪储钱罐的重量,并且我们也知道给定币种的所有硬币的重量。那么,我们可以保证小猪储钱罐中最少有多少钱。

你的任务是找出最差的情形,即判断小猪储钱罐中的硬币最少有多少钱。我们需要你的帮助。不能再贸然打碎小猪储钱罐了!

题解:

完全背包裸题,本题球的填完背包的情况下最少价值是多少

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\\n",a,b);
typedef long long ll;
using namespace std;

inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
   return s*w;
}
const int maxn=5e4+9;
int dp[maxn];
int p[maxn],w[maxn];
int main()
{
	int t;
	cin>>t;
	while(t--){
		int e,f;
		cin>>e>>f;
		
		int C=f-e;
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)cin>>w[i]>>p[i];//重量,金额 
		for(int i=1;i<=C;i++)dp[i]=1e9;
		dp[0]=0;
		for(int i=1;i<=n;i++){
			for(int j=p[i];j<=C;j++){
				dp[j]=min(dp[j],dp[j-p[i]]+w[i]);
			}
		}
		if(dp[C]==1e9)printf("This is impossible.\\n");
		else printf("The minimum amount of money in the piggy-bank is %d.\\n",dp[C]);
	}
}

以上是关于Piggy-Bank HDU - 1114的主要内容,如果未能解决你的问题,请参考以下文章

C - Piggy-Bank HDU - 1114

[2016-03-27][HDU][1114][Piggy-Bank]

HDU 1114 Piggy-Bank

hdu1114Piggy-Bank

HDU 1114 Piggy-Bank(完全背包)

HDU-1114_Piggy-Bank