后悔贪心+P2949 [USACO09OPEN]Work Scheduling G

题意:

给你N个任务,每个任务 iii 都有截止日期DiD_{i}Di和报酬PiP_{i}Pi,每完成一个工作需要耗费1的单位时间,你需要使所得报酬最大并输出。

题目描述

Farmer John has so very many jobs to do! In order to run the farm efficiently, he must make money on the jobs he does, each one of which takes just one time unit.

His work day starts at time 0 and has 1,000,000,000 time units (!). He currently can choose from any of N (1 <= N <= 100,000) jobs

conveniently numbered 1…N for work to do. It is possible but

extremely unlikely that he has time for all N jobs since he can only work on one job during any time unit and the deadlines tend to fall so that he can not perform all the tasks.

Job i has deadline D_i (1 <= D_i <= 1,000,000,000). If he finishes job i by then, he makes a profit of P_i (1 <= P_i <= 1,000,000,000).

What is the maximum total profit that FJ can earn from a given list of jobs and deadlines? The answer might not fit into a 32-bit integer.

输入格式

  • 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.

题意翻译

约翰的工作日从 0时刻开始,有 10910^{9}109个单位时间。在任一单位时间,他都可以选择编号1到N 的N(1<=N<=105)N(1<=N<=10^{5})N(1<=N<=105) 项工作中的任意一项工作来完成。工作 iii的截止时间是 Di(1<=Di<=109)D_{i}(1<=D_{i}<=10^{9})Di(1<=Di<=109) ,完成后获利是 。在给定的工作利润和截止时间下,求约翰能够获得的利润最大为多少。

输入

3
2 10
1 5
1 7

输出

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.先假设如果一个工作有时间去做,就先做了它,将各项工作按截止时间压入一个小根堆。
2.当我们找到一个没法做却价值比当前堆顶高的工作时,我们就放弃那个最小的工作,用做它的时间去做这个价值更高的工作。用优先队列(小根堆)来维护队首元素最小。
3.在判断第 i 项工作做与不做时,若其截至时间符合条件,则将其与队中报酬最小的元素比较,若第 i 项工作报酬较高(后悔),则 ans += a[i].p - q.top()。

复习:

C++优先队列的基本使用方法
在优先队列中,优先级高的元素先出队列。
标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。

  • 优先队列的第一种用法,也是最常用的用法:
 priority_queue < int > q;//通过<操作符可知在整数中元素大的优先级高。故队列由大到小

通过<操作符可知在整数中元素大的优先级高。故队列由大到小

  • 第二种方法:
    如果我们要把元素从小到大输出怎么办呢?
    这时我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。
priority_queue<int,vector<int>,greater<int>>q;

其中
第二个参数为容器类型。
第二个参数为比较函数。

  • 第三种方法:
    自定义优先级(直接在结构体里写,或者写一个函数)
struct node
{int x,y;bool operator<(const node&a)const{return x<a.x;}
}s[M];

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
typedef long long ll;
const int M=1e5+10;struct node{int x,y;bool operator<(const node&a)const{return x<a.x;}
}s[M];
priority_queue<int,vector<int>,greater<int> >q;//"> >"之前要有空格
int n;
ll ans;
int main(){cin>>n;ans=0;for(int i=1;i<=n;i++){cin>>s[i].x>>s[i].y;}sort(s+1,s+n+1);//先对时间排序for(int i=1;i<=n;i++){if(s[i].x<=q.size()){//当我们找到一个没法做却价值比当前堆顶高的工作时,我们就放弃那个最小的工作,用做它的时间去做这个价值更高的工作。if(s[i].y>q.top()){//用优先队列(小根堆)来维护队首元素最小。ans=ans+s[i].y-q.top();q.pop();q.push(s[i].y);}}else{//可以做,就直接放进去q.push(s[i].y);ans+=s[i].y;}}cout<<ans<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JavaWeb-HTML]HTML标签_表单标签

HTML标签&#xff1a;表单标签 * 表单&#xff1a;* 概念&#xff1a;用于采集用户输入的数据的。用于和服务器进行交互。* form&#xff1a;用于定义表单的。可以定义一个范围&#xff0c;范围代表采集用户数据的范围* 属性&#xff1a;* action&#xff1a;指定提交数据的UR…

Sql Server之旅——第十三站 深入的探讨锁机制

上一篇我只是做了一个堆表让大家初步的认识到锁的痉挛状态&#xff0c;但是在现实世界上并没有这么简单的事情&#xff0c;起码我的表不会没有索引对吧&#xff0c;还有就是我的表一定会有很多的连接过来&#xff0c;10:1的读写&#xff0c;很多码农可能都会遇到类似神乎其神的…

[JavaWeb-CSS]CSS扩展选择器

扩展选择器&#xff1a; 1. 选择所有元素&#xff1a;* 语法&#xff1a; *{}2. 并集选择器&#xff1a;* 选择器1,选择器2{}3.后代选择器祖先元素和后代元素&#xff08;相对的概念&#xff09;后代元素&#xff1a;被包含在祖先元素中的元素。祖先元素&#xff1a;包含后代元…

后端程序员转行前端,强烈推荐这6个前端UI框架,第二款小程序UI框架颜值最高!...

昨天有个同事问我有没有可以直接上手的前端UI框架。那今天就给大家推荐6个简单、视觉体验好的前端框架没吃过猪肉&#xff0c;肯定见过猪跑&#xff01;Jquery Mobiledemo地址&#xff1a;https://demos.jquerymobile.com/1.1.0/教程地址:https://www.codesocang.com/jquerymob…

二分+最大化最小值 River Hopscotch POJ - 3258

题意&#xff1a; 起始有两个石头&#xff0c;位置是000和nnn,在这中间有n个石头&#xff0c;问如何拿走m块石头后&#xff0c;使得他们之间的最小间隔的最大值。 题目&#xff1a; Every year the cows hold an event featuring a peculiar version of hopscotch that invo…

[JavaWeb-JavaScript]JavaScript概念与功能

JavaScript&#xff1a; * 概念&#xff1a; 一门客户端脚本语言* 运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎* 脚本语言&#xff1a;不需要编译&#xff0c;直接就可以被浏览器解析执行了* 功能&#xff1a;* 可以来增强用户和html页面的交互过程&#x…

Kubernetes引发“军备赛”,K8s真是企业生存的关键吗

导语与许多其他国家一样&#xff0c;英国对云基础架构的需求空前增长。随着学校&#xff0c;办公室&#xff0c;商店和饭店的关闭以应对疫情&#xff0c;云驱动的应用程序应运而生&#xff0c;解决挑战并提供安慰。随着各个年龄段人群的屏幕时间激增&#xff0c;数据中心正努力…

Markdown编译器插入公式的数学符号及字体颜色、背景

文章目录目录插入公式的数学符号Markdown字体颜色、背景markdown表格设置目录 [TOC](目录)[TOC](目录)[TOC](目录) 可以直接生成目录 插入公式的数学符号 可以直接复制用&#xff0c;可以用插入代码&#xff0c;但前后都需加上一个绝对引用符号&#xff08;$) 符号代码xax_{…

[JavaWeb-JavaScript]JavaScript与html结合方式

与html结合方式 1. 内部JS&#xff1a;* 定义<script>&#xff0c;标签体内容就是js代码2. 外部JS&#xff1a;* 定义<script>&#xff0c;通过src属性引入外部的js文件* 注意&#xff1a;1. <script>可以定义在html页面的任何地方。但是定义的位置会影响执行…

【新插件发布】AzureAD运维Excel版插件,增删改查快10倍c以上!

在笔者的BI项目开发中&#xff0c;用到了Azure的AzureSQL和AzureAS分析服务&#xff0c;此两大服务&#xff0c;可和AzureAD帐号体系打通。而AzureAD帐号&#xff0c;在其免费功能基础功能上&#xff0c;是免费使用的&#xff0c;随着项目开发上线进入运维阶段&#xff0c;Azur…

数论相关

目录符号整除/同余理论常见符号数论函数常见符号其他常见符号位运算与、或、异或取反左移和右移复合赋值位运算符关于优先级位运算的应用有关 2 的幂的应用取绝对值取两个数的最大/最小值操作一个数的二进制位模拟集合操作快速幂模意义下大整数乘法快速乘高精度快速幂欧拉降幂求…

[JavaWeb-JavaScript]JavaScript注释数据类型

注释 1. 单行注释&#xff1a;//注释内容2. 多行注释&#xff1a;/*注释内容*/数据类型&#xff1a; 1. 原始数据类型(基本数据类型)&#xff1a;1. number&#xff1a;数字。 整数/小数/NaN(not a number 一个不是数字的数字类型)2. string&#xff1a;字符串。 字符串 "…

博客系统知多少:揭秘那些不为人知的学问(二)

点击上方关注“汪宇杰博客”上篇《博客系统知多少&#xff1a;揭秘那些不为人知的学问&#xff08;一&#xff09;》介绍了博客的历史、我的博客故事及博客的受众来源。本篇精彩继续&#xff0c;介绍博客基本功能设计要点。1.“博客”的前世今生2.我的博客故事3.谁是博客的受众…

二分+01分数规划+最大化平均值 Dropping tests POJ - 2976

题意&#xff1a; 给你若n个分数&#xff0c;分子a[i]a[i]a[i],分母b[i]b[i]b[i],使满足公式100⋅∑i1nai∑i1nbi100\cdot\tfrac{\sum_{i1}^{n} a_{i}}{\sum_{i1}^{n} b_{i}}100⋅∑i1n​bi​∑i1n​ai​​&#xff0c;求任意去掉k个分数后&#xff0c;公式结果最大值。 题目…

[JavaWeb-JavaScript]JavaScript变量

变量 * 变量&#xff1a;一小块存储数据的内存空间* Java语言是强类型语言&#xff0c;而JavaScript是弱类型语言。* 强类型&#xff1a;在开辟变量存储空间时&#xff0c;定义了空间将来存储的数据的数据类型。只能存储固定类型的数据* 弱类型&#xff1a;在开辟变量存储空间时…

基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

莫比乌斯反演/容斥 +2020ICPC 江西省大学生程序设计竞赛 A Simple Math Problem

题目描述 输入描述: 输出描述: 示例1 输入 3 输出 5 分析&#xff1a; 1.这个题其实考的是一个莫比乌斯反演题&#xff0c;但是由于我知识储备不够&#xff0c;没有看出来&#xff0c;题目给的范围可以瞎搞一下&#xff0c;所以下面容斥可以过。 2.转换一下就是一道经典的…

猎鹰与龙飞船基于Linux,采用C++、Chromium与JS开发

最近两天科技界最重大的事件莫过于马斯克的 SpaceX 成功实现了猎鹰 9 号&#xff08;Falcon 9&#xff09;带着龙飞船&#xff08;Crew Dragon&#xff09;成功发射&#xff0c;并使飞船与国际空间站对接&#xff0c;将 NASA 两名宇航员送上了轨道前哨。背后关于 Falcon 9 与 C…

[JavaWeb-JavaScript]JavaScript运算符

运算符 1. 一元运算符&#xff1a;只有一个运算数的运算符&#xff0c;-- &#xff0c; (正号) * --: 自增(自减)* (--) 在前&#xff0c;先自增(自减)&#xff0c;再运算* (--) 在后&#xff0c;先运算&#xff0c;再自增(自减)va* (-)&#xff1a;正负号* 注意&#xff1a;…

java编码给出二维数组List<List<Integer>>matrix,输出每列最小的值

import java.util.LinkedList; import java.util.List;public class Main {public static void main(String[] args){/** a 是一个链表 &#xff0c;链表里面存放的对象是List<Integer>a* temp 是 List<Integer>* */List<List<Integer>> a new Linked…