UVA 1153 - Keep the Customer Satisfied

来源:互联网 发布:网络歌手易言照片 编辑:程序博客网 时间:2024/06/05 02:48

贪心  按d从小到大排序,res=0,每次res+=q,如果res超了就删掉前面的人中q最大的那个人

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int maxn = 800000+10;int T, n;struct node{    int q, d;    bool operator < (const node a) const {        return q < a.q;    }}str[maxn];bool cmp(const node& a, const node&b){    return a.d < b.d;}int main(){    scanf("%d", &T);    while(T--) {        scanf("%d", &n);        for(int i = 0; i < n; ++i)            scanf("%d%d", &str[i].q, &str[i].d);        sort(str, str+n, cmp);        int res = 0, ans = 0;        priority_queue<node> s;        for(int i = 0; i < n; ++i) {            s.push(str[i]);            res += str[i].q;            if(res > str[i].d) {                node t = s.top();                s.pop();                res -= t.q;                --ans;            }            ++ans;        }        if(ans <= 0) ans = 0;        printf("%d\n", ans);        if(T) printf("\n");    }    return 0;}


0 0
原创粉丝点击