//多重背包,刚好放满的情况
//价值达到最小的情况
//hdu 1114
#include<iostream>
using namespace std;
int v[10005], w[10005], dp[10005];
//
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
//memset(dp, 0, sizeof(dp));//①达到最大
memset(dp, 0x7f, sizeof(dp));//①达到最小的解法
//F-E表示背包大小
int E, F, n, i, j;
scanf("%d%d%d", &E, &F, &n);
for( i=0; i < n; i++ )
{
scanf("%d%d", &v[i], &w[i]);
dp[0] = 0;
for( j=0; j <= F-E-w[i]; j++ )
{
//if(dp[j]+v[i] > dp[j+w[i]])//②达到最大
if(dp[j]+v[i] < dp[j+w[i]])//②达到最小的解法
dp[j+w[i]] = dp[j] + v[i];
}
}
if(dp[F-E] == 0x7f7f7f7f)
printf("This is impossible.\n");//放不满的输出的结果
else
printf("The minimum amount of money in the piggy-bank is %d.\n", dp[F-E]);
}
return 0;
}
/*
3
10 110
2
1 1
30 50
10 110
The minimum amount of money in the piggy-bank is 60.
*/
hdu 1114 Piggy-Bank
最新推荐文章于 2021-08-13 03:48:46 发布