https://vjudge.net/contest/170788#problem/F
给定一个存钱罐初始重量和装了钱币的重量,
给定每种钱币的 重量和价值。
问你最小的价值是多少。
可知是 正好装下,dp[0]变成0,其余无穷大。
若是不要求装满,则全部为0
然后是完全背包了
#include <iostream>
#include <cstdio>
#include <cstdio>
using namespace std;
const int maxn=200000;
int dp[maxn];
int c[maxn];
int v[maxn];
int main()
{ int t;
int m,n;
int k;
scanf("%d",&t);
while(t--){
scanf("%d%d",&m,&n);
m=n-m;
if(m<=0){
puts("This is impossible.");
continue;
}
scanf("%d",&k);
for(int i=0;i<k;i++)
scanf("%d%d",&v[i],&c[i]);
for(int i=0;i<=m;i++)
dp[i]=1e9;
dp[0]=0;
for(int i=0;i<k;i++)
for(int j=c[i];j<=m;j++)
dp[j]=min(dp[j],dp[j-c[i]]+v[i]);
if(dp[m]==1e9)
puts("This is impossible.");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);
}
return 0;
}