当前位置: 首页 > news >正文

洛谷 P2949 [USACO09OPEN] Work Scheduling G

思路:反悔贪心

首先,我们看每一个工作,如果目前这个工作可以做,就做,否则看这个工作是否比目前已经做了的工作中最便宜的更赚,是的话就替换掉,这样就能获得更大的利润。

但是怎么每次都能挑出一个最便宜的呢?其实priority_queue会告诉你什么叫堆,毕竟不可能还拉个数组一直排序吧。

每次如果可以直接做,就把他直接丢进小根堆,当塞不下的时候,直接查看堆顶也就是最廉价的工作,看换不换,换的话就把堆顶给弹出去,然后把目前这个工作再塞进去就行了。

时间复杂度O(n log n)

#include<bits/stdc++.h>
using namespace std;
struct node{long long d,p;
}a[100005];
bool cmp(node x,node y){return x.d<y.d;
}
priority_queue<int,vector<int>,greater<int> > q;//小根堆
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].d>>a[i].p;}sort(a+1,a+1+n,cmp);//将a数组按截至日期排序long long ans=0,cnt=0;//最终答案,已做工作数目for(int i=1;i<=n;i++){if(a[i].d>cnt){//如果还可以做ans+=a[i].p;//加上利润cnt++;//多做了一项q.push(a[i].p);//塞进堆}else if(a[i].p>q.top()){//如果这个工作比目前已经做了的工作中最便宜的更赚ans-=q.top();//去掉已经做了的工作中最便宜的利润ans+=a[i].p;//加上这个工作的利润q.pop();//弹掉堆顶q.push(a[i].p);//塞进去}}cout<<ans;return 0;
}
http://www.dtcms.com/a/511727.html

相关文章:

  • 建站公司杭州南宁制作网站服务商
  • Deepseek-ocr论文精读
  • 【完整源码+数据集+部署教程】【文件&发票】发票信息提取系统源码&数据集全套:改进yolo11-ContextGuided
  • SpringBoot+Shiro+mybatis教务管理系统源码
  • 佛山个人制作网站公司手机百度下载免费安装
  • Git 项目开发核心指南:聚焦常用语法与完整流程
  • 【图像处理基石】遥感多光谱图像处理入门:从概念到实战(附Python代码)
  • Spring Boot项目中使用线程池并发插入6万条数据的线程池参数设置指南
  • 网站建设网站设计哪家专业东莞展馆设计公司
  • Docker Swarm:打造高效、可扩展的容器编排引擎,引领微服务新纪元(上)
  • 第15章:Spring AI Alibaba — 认识Graph框架
  • [Dify 实战] 构建一个自动发送邮件的插件:从 OpenAPI 到自动化通知
  • 基于Chrome140的FB账号自动化(关键词浏览)——脚本撰写(二)
  • CICD实战(8) - 使用Arbess+GitLab实现React.js项目自动化部署
  • 小程序uview actionSheet 内容过多高度设置
  • 基于.net的个人网站开发实录哪个网站建站比较好
  • 徐州做网站公司哪家好湘建网
  • 做头发个人网站制作素材专业网站设计制作服务
  • Linux初识进程
  • c#using Oracle.ManagedDataAccess.Client 批量保存数据
  • 人大金仓数据库kingbase8创建表示例
  • oracle包编译错误
  • 函数指针 指针函数 数组指针 指针数组 常量指针 指针常量
  • sqoop采集完成后导致hdfs数据与Oracle数据量不符的问题。怎么解决?
  • 洛阳有做网站开发的吗平台网站建设源码
  • 从零开始的C++学习生活 12:AVL树全面解析
  • Spring Boot 启动慢?启动过程深度解析与优化策略
  • telnet工具使用详解
  • YOLOv4:目标检测界的 “集大成者”
  • 从零开始的C++学习生活 11:二叉搜索树全面解析