题意:
给定存钱罐的重量,存钱之后的重量,,货币价值及重量。求存钱罐里面最少有多少钱。
思路:
跟完全背包求最大值差不多,不同的是,背包要刚好装满还有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;}