dp
#include#include #include #include using namespace std;#define MAX_COIN_NUM 505#define MAX_CAP 10005struct Coin{ int price, weight;}coin[MAX_COIN_NUM];int capacity;int coin_num;int f[MAX_CAP]; void input(){ int a, b; scanf("%d%d", &a, &b); capacity = b - a; scanf("%d", &coin_num); for (int i = 0; i < coin_num; i++) scanf("%d%d", &coin[i].price, &coin[i].weight);}void work(){ memset(f, -1, sizeof(f)); f[0] = 0; for (int i = 0; i < coin_num; i++) for (int j = coin[i].weight; j <= capacity; j++) if (f[j - coin[i].weight] != -1) { int temp = f[j - coin[i].weight] + coin[i].price; if (f[j] == -1 || f[j] > temp) f[j] = temp; }}int main(){ int t; scanf("%d", &t); while (t--) { input(); work(); if (f[capacity] == -1) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n", f[capacity]); } return 0;}