题目大意:
给你一个空袋子的质量,和一个满袋子的质量,还有n种硬币的价值和重量,问,尽可能装满袋子的情况下能获得的硬币价值最小是多少
解题思路:
赤果果的完全背包;仅需要注意的是dp的初始化,袋子里为空的时候,价值也为0;
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x1,x2;
int sum;
int n;
int val[510],cost[510];
int dp[10010];
memset(dp,inf,sizeof(dp));
dp[0]=0;
scanf("%d%d",&x1,&x2);
sum=x2-x1;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d%d",&val[i],&cost[i]);
for(int i=0;i<n;i++)
{
for(int j=cost[i];j<=sum;j++)
dp[j]=min(dp[j],dp[j-cost[i]]+val[i]);
}
if(dp[sum]!=inf)
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[sum]);
else
printf("This is impossible.\n");
}
}