zoukankan      html  css  js  c++  java
  • bzoj1572 [Usaco2009 Open]工作安排Job

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1572

    【题解】

    这么傻逼的题会想错啊。。。

    想到用优先队列维护了但是维护的方向想错了。

    按时间排序

    用优先队列维护当前p最大的当前时间个。

    然后加入 如果不满就加,否则选一个扔掉。最后统计队列中的即可。

    # include <queue>
    # include <stdio.h>
    # include <string.h>
    # include <iostream>
    # include <algorithm>
    // # include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    const int M = 5e5 + 10;
    const int mod = 1e9+7;
    
    # define RG register
    # define ST static
    
    int n;
    struct pa {
        int d, p;
        pa () {}
        pa (int d, int p) : d(d), p(p) {}
        friend bool operator < (pa a, pa b) {
            return a.p > b.p || (a.p == b.p && a.d < b.d);
        }
    }p[M];
    
    priority_queue<pa> q;
    
    inline bool cmp(pa a, pa b) {
        return a.d < b.d;
    }
    
    
    int main() {
        cin >> n;
        for (int i=1; i<=n; ++i) scanf("%d%d", &p[i].d, &p[i].p);
        sort(p+1, p+n+1, cmp);
        for (int i=1; i<=n; ++i) {
            if(q.size() < p[i].d) q.push(p[i]);
            else if(p[i].p > q.top().p) {
                q.pop();
                q.push(p[i]);
            }
        }
        ll ans = 0;
        while(!q.empty()) {
            ans += q.top().p;
            q.pop();
        }
        cout << ans << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    SNOI2017炸弹
    tarjan进阶
    BZOJ3331压力
    将多个对象合并为一个对象
    原型模式详解
    HTML5
    isAnimated函数
    让函数执行的各种方式
    zepto源码注解
    mobileTech
  • 原文地址:https://www.cnblogs.com/galaxies/p/bzoj1572.html
Copyright © 2011-2022 走看看