大概题意是有个存钱罐,自身重量w1,存满之后重量为w2,所以钱的重量就是w=w2-w1...现在给出n种存钱罐中的钱币价值和重量,求存钱罐存满的情况下(即钱的总重量为w),所有钱的总价值最小是多少...
完全背包,求最小,所以我们开始要把dp数组全部置为比较大的数字,dp[0]需要等于0,边界条件...然后就是模板了...
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define inf 2139062143
int dp[20000];
int main()
{
int t,w1,w2,n;
cin>>t;
while(t--)
{
cin>>w1>>w2>>n;
int w=w2-w1;
int P,W;
memset(dp,127,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&P,&W);
for(int j=W;j<=w;j++)
dp[j]=min(dp[j],dp[j-W]+P);
}
if(dp[w]==inf)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w]);
}
return 0;
}