/*背包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"); }}
新聞熱點
疑難解答