• [luoguP2949] [USACO09OPEN]工作调度Work Scheduling(贪心 + 优先队列)


    传送门

    这个题类似于建筑抢修

    先按照时间排序。

    如果当前时间小于任务截止时间就选,

    否则,看看当前任务价值是否比已选的任务的最小价值大,

    如果是,就替换。

    可以用优先队列。

    ——代码

     1 #include <queue>
     2 #include <cstdio>
     3 #include <iostream>
     4 #include <algorithm>
     5 #define LL long long
     6 
     7 const int MAXN = 1e6 + 5;
     8 int n;
     9 LL tim, ans;
    10 struct node
    11 {
    12     LL x, y;
    13 }p[MAXN];
    14 std::priority_queue <LL, std::vector <LL>, std::greater <LL> > q;
    15 
    16 inline LL read()
    17 {
    18     LL x = 0, f = 1;
    19     char ch = getchar();
    20     for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
    21     for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
    22     return x * f;
    23 }
    24 
    25 inline bool cmp(node x, node y)
    26 {
    27     return x.x < y.x;
    28 }
    29 
    30 int main()
    31 {
    32     int i;
    33     n = read();
    34     for(i = 1; i <= n; i++) p[i].x = read(), p[i].y = read();
    35     std::sort(p + 1, p + n + 1, cmp);
    36     for(i = 1; i <= n; i++)
    37     {
    38         if(tim < p[i].x) tim++, ans += p[i].y, q.push(p[i].y);
    39         else if(tim == p[i].x && p[i].y > q.top())
    40         {
    41             ans += p[i].y - q.top();
    42             q.pop();
    43             q.push(p[i].y);
    44         }
    45     }
    46     printf("%lld
    ", ans);
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    sublime生成html快捷标签布局
    vue.js选项卡动态组件
    textarea内容限制字数
    60s验证等待
    vue.js显示隐藏
    CSS强制性换行
    Ultra Pull To Refresh下拉刷新
    Open经验库网址
    Fresco实例
    解决LinearLayout中控件不能居右对齐
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6908496.html
Copyright © 2020-2023  润新知