CSU 1559 外卖的撕‘哔’大战

来源:互联网 发布:游戏程序员累吗 编辑:程序博客网 时间:2024/06/10 07:47

CSU 1559 外卖的撕‘哔’大战


Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 738 Solved: 148

Description

“订外卖就上XXX,满X减Y,满X减Y…”这样的声音老回荡在我们耳旁。发传单,拉条幅的宣传手段也屡见不鲜。外卖的撕‘哔’大战充满血雨腥风,不过作为消费者,我们的问题是:“已知N种类似满X减Y的优惠,请问你想点M次外卖,最少出多少钱呢?”。(P.S:各优惠不能叠加,外卖不能拼单拆单。)

Input

多组数据,第一行有一个整数T,表示有T组数据。(T<=100)

以下每组数据第一行有两个整数N和M,表示外卖网站的优惠种数和你想点的外卖个数。(1<=N,M<=100)

然后接下来N行,每行两个整数ai,bi,表示一种优惠为满ai元可减bi元。(ai>=bi)

最后一行是M个整数,表示你每次点的外卖的价格。

所有的数据不会超过int。

Output

每组数据输出一行,为一个整数,是你在所有外卖上的花销。

Sample Input

2
3 3
5 3
10 6
20 8
5 10 20
3 3
5 5
10 10
20 20
6 10 20

Sample Output

18
1

#include <iostream>#include <algorithm>using namespace std;struct Info {    int mon;    int dis;};int main(){    int T;    cin >> T;    while(T--) {        int N, M;        cin >> N >> M;        Info info[N + 5];        for(int i = 0; i < N; i++) {            cin >> info[i].mon >> info[i].dis;        }        int ans = 0;        int money;        for(int i = 0; i < M; i++) {            cin >> money;            int maxdis = 0;            for(int i = 0; i < N; i++) {                if(money >= info[i].mon) {                    maxdis = max(maxdis, info[i].dis);                }            }            ans += max(0, money - maxdis);        }        cout << ans << endl;    }    return 0;}
0 0