思路:完全揹包。補充在註釋中。
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int f[10010] = { 0 };
int main()
{
int E, F, m, N, T, p[1000], w[1000];
cin >> T;
while (T--)
{
scanf_s("%d%d%d", &E, &F, &N);
m = F-E;
for (int i = 0; i < N; i++)
{
cin >> p[i] >> w[i];
}
for (int i = 1; i <= m; i++)
{
f[i] = 10000000;
}
for(int i=0;i<N;i++)
for (int j = w[i]; j <= m; j++)
{
f[j] = min(f[j], f[j - w[i]] + p[i]);//此處是在剩餘空間[j - w[i]]中進行空間安排,後面則是揹包所對應的價值。
}
if (f[m] != 10000000)
printf("The minimum amount of money in the piggy-bank is %d.\n", f[m]);
else
cout << "This is impossible." << endl;
}
}