题意:
给定存钱罐的重量,存钱之后的重量,,货币价值及重量。求存钱罐里面最少有多少钱。
思路:
跟完全背包求最大值差不多,不同的是,背包要刚好装满还有dp的数组初始化要为正无穷。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[10010];
int w[10010],v[10010];
int main(){
int T;
scanf("%d",&T);
while(T--){
int st,en,n,co,value,weight;
scanf("%d%d%d",&st,&en,&co);
n=en-st;
for(int i=1;i<=co;i++){
scanf("%d%d",&v[i],&w[i]);
}
for(int i=1;i<=n;i++)
dp[i]=1e9;
dp[0]=0;
for(int i=1;i<=co;i++){
for(int j=w[i];j<=n;j++)
dp[j]=min(dp[j],dp[j-w[i]]+v[i]);
}
if(dp[n]==1e9) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[n]);
}
return 0;}