完全背包:
但题目中要求的是最小的价值,所以要用min
程序:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int M = 100000000;
int dp[11000],w[11000],p[11000];
int main()
{
int n,i,j,t,m,k,e,f;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&e,&f);
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&p[i],&w[i]);
}
m=f-e;
for(i=1;i<=m;i++)
{
dp[i]=M;
}
dp[0]=0;
for(i=0;i<n;i++)
{
for(j=w[i];j<=m;j++)
{
dp[j]=min(dp[j],dp[j-w[i]]+p[i]);
}
}
if(dp[m]==M)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);
}
return 0;
}