2017年10月22日 星期日

(UVa) 1153 - Keep the Customer Satisfied [Greedy]

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=845&page=show_problem&problem=3594

#include <iostream>
#include <cstdio>
#include <queue>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long LL;
typedef pair<LL,LL> pii;

int main () {
    int T;
    scanf("%d",&T);
    while (T--) {
        int n;
        scanf("%d",&n);
        vector<pii> v;
        for (int i=0;n>i;i++) {
            int a,b;
            scanf("%d %d",&a,&b);
            v.push_back({b,a});
        }
        sort(v.begin(),v.end());
        int sum=0;
        priority_queue<LL> pq;
        for (pii p:v) {
            sum += p.second;
            pq.push(p.second);
            while (sum > p.first) {
                sum -= pq.top();
                pq.pop();
            }
        }
        printf("%d\n",pq.size());
        if (T) puts("");
    }
}

沒有留言:

張貼留言