/*背包dpF - Piggy-Bank时间: 2017/02/20题意:装满背包,但要求价值最低的完全背包题解:dp[i][j] 表示在背包大小为j中装前i个物品最优的价值*/#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<map>using namespace std;#define N 1010#define INF 0x3f3f3f3fint num[10001],w[500],v[500];int main(){ int n,m,e,f,t; scanf("%d",&t); while(t--) { scanf("%d%d",&e,&f); m=f-e; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&v[i],&w[i]); num[0] = 0; for(int i=1;i<=m;i++) num[i] = -1; for(int i=0;i<n;i++) { for(int j=w[i];j<=m;j++) { if(num[j-w[i]]!=-1 && num[j]!=-1) { if(num[j-w[i]]+v[i]<num[j]) num[j]=num[j-w[i]]+v[i]; } else if(num[j-w[i]]!=-1 && num[j]==-1) num[j]=num[j-w[i]]+v[i]; } } if(num[m]!=-1) PRintf("The minimum amount of money in the piggy-bank is %d./n",num[m]); else printf("This is impossible./n"); }}
新闻热点
疑难解答