很简单,给出n种硬币的价值和重量,以及总硬币的重量,求总硬币的最小价值。直接套用完全背包即可。
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int v[10000];
int w[10000];
int dp[10000];
int n,m,c;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
scanf("%d",&c);
for(int i=0;i<c;i++){
scanf("%d%d",&v[i],&w[i]);
}
int g=m-n;
for(int i=0;i<=g;i++)
dp[i]=INF;
dp[0]=0;
for(int i=0;i<c;i++){
for(int j=w[i];j<=g;j++){
dp[j]=min(dp[j-w[i]]+v[i],dp[j]);
}
}
if(dp[g]==INF)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[g]);
}
}