还是要先去刷一刷背包九讲啊!
/* ***********************************************
Author :PeterBishop
Created Time :2019年03月16日 星期六 11时14分58秒
File Name :t.cpp
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <string>
using namespace std;
struct node{
int p;
int w;
}coins[10010];
const int INF=0x3f3f3f3f;
int dp[10010];
int main()
{
freopen("in.txt","r",stdin);
int t;
cin>>t;
while(t--){
int e,f;
cin>>e>>f;
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>coins[i].p>>coins[i].w;
memset(dp,INF,sizeof(dp));
int cap=f-e;
dp[0]=0;
for(int i=1;i<=n;i++){
for(int v=coins[i].w;v<=cap;v++)
dp[v]=min(dp[v],dp[v-coins[i].w]+coins[i].p);
}
if(dp[cap] == INF)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n", dp[cap]);
}
return 0;
}