#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;
}

输入格式

第一个行输入两个整数 e,f(1ef10000)e,f(1≤e≤f≤10000) ,分别表示存钱罐的初始重量和现在重量。

第二行输入一个整数 n(1n500n(1≤n≤500,表示有 nn 种硬币。

接下来有 nn 行输入,每行有两个整数 p,w(1p50000,1w10000)p,w(1≤p≤50000,1≤w≤10000),分别表示硬币的面额和硬币的重量。

输出格式

如果这些钱可以凑出存钱罐的重量,那么请输出存钱罐里最少有多少钱?

如果不能,请输出"impossible."

格式说明输出时每行末尾的多余空格,不影响答案正确性

样例输入

1 6
2
10 3
20 4

样例输出

impossible.