#include<stdio.h>
#include<iostream>
#include<cstring>
#include<algorithm>
const int INF=0x3f3f3f3f;//最大值
using namespace std;
typedef long long ll;
int p[502];
int w[502];
int dp[10005];
int main()
{
int t;
cin>>t;
while(t--)
{
int e,f,n;
cin>>e>>f;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>p[i]>>w[i];
}
memset(dp,INF,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
for(int j=w[i];j<=f-e;j++) dp[j]=min(dp[j],dp[j-w[i]]+p[i]);
if(dp[f-e]!=INF)
cout<<"The minimum amount of money in the piggy-bank is "<<dp[f-e]<<"."<<endl;
else
cout<<"This is impossible."<<endl;
}
return 0;
}
HDOJ 1114 piggy-bank
最新推荐文章于 2023-09-11 16:49:05 发布
本文探讨了使用动态规划解决硬币兑换问题的方法,通过最小化成本来计算达到目标值所需的最少硬币数量。代码中定义了硬币面额、权重和动态规划数组,实现了在给定重量限制下寻找最小成本的解决方案。

2290

被折叠的 条评论
为什么被折叠?



