首页 > 其他分享 >洛谷P2949 Work Scheduling G

洛谷P2949 Work Scheduling G

时间:2023-01-06 23:22:06浏览次数:61  
标签:10 洛谷 int Work leq second Scheduling const 截止

[洛谷P2949 Work Scheduling G]([P2949 USACO09OPEN]Work Scheduling G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

[USACO09OPEN]Work Scheduling G

题面翻译

约翰有太多的工作要做。为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从 \(0\) 时刻开始,有 \(10^9\) 个单位时间。在任一时刻,他都可以选择编号 \(1\) 到 \(N\) 的 \(N(1 \leq N \leq 10^5)\) 项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能。 对于第 \(i\) 个工作,有一个截止时间 \(D_i(1 \leq D_i \leq 10^9)\),如果他可以完成这个工作,那么他可以获利 \(P_i( 1\leq P_i\leq 10^9 )\). 在给定的工作利润和截止时间下,约翰能够获得的利润最大为多少.

输入格式

* Line 1: A single integer: N

* Lines 2..N+1: Line i+1 contains two space-separated integers: D_i and P_i

输出格式

* Line 1: A single number on a line by itself that is the maximum possible profit FJ can earn.

样例 #1

样例输入 #1

3 
2 10 
1 5 
1 7

样例输出 #1

17

提示

Complete job 3 (1,7) at time 1 and complete job 1 (2,10) at time 2 to maximize the earnings (7 + 10 -> 17).

题解:

反悔贪心。首先按照日期升序排列,因为我们一般印象就是截止日期早的先做嘛,这没有问题,但是如果说我们后面遇到了截止日期虽然晚,但是利润高的,例如

1 5
1 7
2 10
2 15
我们发现截止日期为2的利润为15的明显比1,7更优,但是1,7和2,10我们都已经做了,那我们怎么办?就是说第二个单位时间我们已经用了,所以说我们反悔即可

我们利用优先队列维护利润获得最小值,q.size()代表已经过了多少个单位时间,这样我们如果一份任务的截止日期d>q.size(),说明截止日期还没到,我们直接做,不犹豫,如果截止日期d<=q.size(),说明你这个任务已经到了截止时间,但是我可以反悔让你在还没截止的时候做,等于让之前的一个任务不去做了,很经典的反悔贪心,直接看代码

#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 1e5 + 10;
priority_queue<ll, vector<ll>, greater<ll>> q;
pll a[N];
int main(void)
{
    Zeoy;
    int t = 1;
    // cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; ++i)
            cin >> a[i].first >> a[i].second;
        sort(a + 1, a + 1 + n);
        ll sum = 0;
        for (int i = 1; i <= n; ++i)
        {
            if (a[i].first > q.size())
            {
                sum += a[i].second;
                q.push(a[i].second);
            }
            else
            {
                if (q.size() && a[i].second > q.top())
                {
                    sum -= q.top();
                    q.pop();
                    sum += a[i].second;
                    q.push(a[i].second);
                }
            }
        }
        cout << sum << endl;
    }
    return 0;
}

标签:10,洛谷,int,Work,leq,second,Scheduling,const,截止
From: https://www.cnblogs.com/Zeoy-kkk/p/17031898.html

相关文章

  • 某个被洛谷 ban 掉的吉老师线段树
    概述所谓吉老师线段树,指的其实是吉如一发明/整理的线段树上区间最值操作和区间历史最值的维护方式。操作区间最值操作\(\foralli\in[l,r],a_i=\min/\max(a_i,v)\)......
  • WorkPlus平台多业务系统集成,让企业沟通协作更畅通
    搭载着5G快车,移动互联网应用得到了爆发式的增长。在线平台开会、远程教学听课、办公,企业全面走向移动办公是必然趋势。大多数企业在数字化浪潮和自身业务需求的促使下都跟......
  • WorkPlus平台多业务系统集成,让企业沟通协作更畅通
    搭载着5G快车,移动互联网应用得到了爆发式的增长。在线平台开会、远程教学听课、办公,企业全面走向移动办公是必然趋势。大多数企业在数字化浪潮和自身业务需求的促使下都跟上......
  • C#可扩展编程MEF Managed Extensibility Framework
    MEF-ManagedExtensibilityFramework是用于创建轻量,可扩展应用程序的库.我们可以理解为它的主要作用是解耦,它让开发人员得以轻松的封装代码并避免强依赖性.MEF让......
  • .net framework4.7.2 不同页面之间的跳转
    首先,我们得新建一个新的.netframework项目,系统会默认生成两个xaml文件,分别是App.xaml和mainWindow.xamlWindow:故名思意,桌面程序的窗体。在WPF桌面应用中,我通常会只用一......
  • QFramework v1.0 使用指南 工具篇:15. 补充内容:GridKit 二维格子数据结构
    在做游戏的过程中,我们经常需要处理二维格子类的数据,比如消除类游戏、俄罗斯方块、各种棋类游戏,还有我们最常用的Tilemap的地块数据,这些都需要二维格子数据结构。而在Ga......
  • git忽略提交特定文件(.idea/workspace.xml)
    参考链接:https://www.cnblogs.com/lizexiong/p/16444830.html1.背景在用git拉取代码时或者提交代码时,在提交时出现modified:.idea/workspace.xml 或拉取代码时出现......
  • Unity(支持WebGL)+PHP(Workerman的Gateway)用Websocket协议实现匹配对战(摇骰子为例)1
    目录服务端PHP(Windows下演示)安装PHP启动服务器结束服务器客户端Unity(版本Unity2021.3.5f1)1.发布Windows客户端ws/wss(不发布小游戏,请忽略此点)演示工程地址扩展发布其他......
  • docker network
    dockernetwork1、是什么docker不启动,默认网络情况ens33locirbr0docker启动后,网络情况多了一个docker0查看docker网络模式命令dockernetworkls2、常用基本命令All命令doc......
  • Django-restframework 视图类
    HTTP请求响应drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作。所以在Django原有的django.views.View类基础上,drf封装了多个视图子类供我们使用。Django-r......