题意是给你空的小猪储存罐重量,和满的重量,然后给出各种硬币的价值和对应的重量,要你估计出满的储蓄罐里面硬币价值和最小为多少。
完全背包问题。直接用模板就行了。
代码:
#include<stdio.h>
const int INF = 0x3f3f3f3f;
const int MaxN = 501;
const int MaxV = 10001;
int P[MaxN];//价值
int W[MaxN];//重量
int dp[MaxV];
int min(int a, int b)
{
return a<b?a:b;
}
int main()
{
int T;
int E, F;
int N;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &E, &F);
F -= E;
scanf("%d", &N);
for(int i = 1; i <= N; i++)
{
scanf("%d%d", &P[i], &W[i]);
}
for(int i = 1; i <= F; i++)
{
dp[i] = INF;
}
dp[0] = 0;
for(int i = 1; i <= N; i++)
{
for(int j = W[i]; j <= F; j++)
{
dp[j] = min(dp[j], dp[j - W[i]] + P[i]);
}
}
if(dp[F] == INF)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n", dp[F]);
}
return 0;
}