概述:給出小豬錢罐的重量和裝滿錢後的重量,然後是幾組數據,每組數據包括每種錢幣的價值與重量,要求出重量最少能裝滿錢罐時的最大價值。
思路:完全揹包問題,
感想:無。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <fstream>
using namespace std;
const int MAX = 600;
int value[MAX];
int weight[MAX];
int dp[10005];
int main()
{
//ifstream cin("aaa.txt");
int T,e,f,n,w;
cin>>T;
while(T--)
{
memset(dp,-9999999,sizeof(dp));
dp[0]=0;
cin>>e>>f;
w=f-e;
cin>>n;
for(int i=1;i<=n;++i)
cin>>value[i]>>weight[i];
for(int i=1;i<=n;++i)
{
for(int j=weight[i];j<=w;++j)
{
if (dp[j]<0) dp[j]=dp[j-weight[i]]+value[i];
else if(dp[j-weight[i]]+value[i]>0)
dp[j]=min(dp[j],dp[j-weight[i]]+value[i]);
}
}
if (dp[w]>0)
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w]);
else printf("This is impossible.\n");
}
return 0;
}