完全背包,和01背包区别就是中间的循环颠倒过来了(要保证是基于这次选择上)
片段
int w, p;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&empty,&full);
sum=full-empty;
for(int i=0;i<=sum;i++)
dp[i]=inf;
dp[0]=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&p,&w);
for(int j=w; j<=sum; j++)
if(dp[j-w]!=inf)
if(dp[j] > dp[j-w]+p)
dp[j] = dp[j-w]+p;
}
if(dp[sum]==inf)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[sum]);
}