#522. 存钱罐
存钱罐
小明是个不懂得存钱的人,每次花钱如流水。于是他的好友小红送给他一个存钱罐,这个存钱罐存钱是不可逆的,只能往里存钱不能取钱,如果想取钱除非打破存钱罐。可这存钱罐又是小红送的,小明自然就可以存下钱来。
经过半年存款后,小明已经存了不少的钱了,但是又不知道这个存钱罐里有多少钱。小明知道存钱罐的初始重量和现在的重量,以及每种硬币的面额和重量。于是小明就找到了聪明的你来帮忙计算,这个存钱罐最少已经有了多少钱呢?
请补全以下代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e4 + 5;
const int inf = 0x3f3f3f3f;
int f[N];
int main() {
memset(f, inf, sizeof(f));
f[0] = 0;
int a, b;
cin >> a >> b;
int v = b - a;
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a >> b;
// 在这里填入代码
}
if (f[v] == inf) {
cout << "impossible." << endl;
} else {
cout << f[v] << endl;
}
return 0;
}
输入格式
第一个行输入两个整数 ,分别表示存钱罐的初始重量和现在重量。
第二行输入一个整数 ,表示有 种硬币。
接下来有 行输入,每行有两个整数 ,分别表示硬币的面额和硬币的重量。
输出格式
如果这些钱可以凑出存钱罐的重量,那么请输出存钱罐里最少有多少钱?
如果不能,请输出"impossible."
。
格式说明输出时每行末尾的多余空格,不影响答案正确性
样例输入
1 6
2
10 3
20 4
样例输出
impossible.