Piggy-Bank HDU - 1114
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章