①要求背包必须装满 求最大值
把f[0]初始化为0,其余初始化为
②要求背包必须装满 求最小值
把f[0]初始化为0,其余初始化为
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int dp[11111];
int w[1111];
int v[1111];
int main()
{
int t;
cin>>t;
while(t--)
{
memset(dp,0x3f3f3f3f,sizeof(dp));
dp[0]=0;
int n;
int a,b;
cin>>a>>b;
int V=b-a;
cin>>n;
for(int i=1;i<=n;i++)
cin>>w[i]>>v[i];
for(int i=1;i<=n;i++)
{
for(int j=v[i];j<=V;j++)
dp[j]=min(dp[j],dp[j-v[i]]+w[i]);
}
if(dp[V]==0x3f3f3f3f) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]);
}
return 0;
}