首页 > 其他分享 >9564 Work Scheduling 结构体排序 优先队列 最小堆 贪心

9564 Work Scheduling 结构体排序 优先队列 最小堆 贪心

时间:2024-09-30 16:38:25浏览次数:8  
标签:node int Work 工作 9564 Scheduling 排序 截止 利润

解决思路

 
  • 排序:首先将所有工作按照截止时间 D_i 进行排序。
 
  • 优先队列:使用一个最小堆来存储当前选择的工作的利润。
 
  • 选择工作:遍历所有工作,如果当前工作的截止时间大于堆的大小,则将该工作加入堆中;否则,如果当前工作的利润大于堆顶的利润,则替换堆顶的工作。
    #include <bits/stdc++.h>
    #define ll long long
    #define pii pair<int, int>
    using namespace std;
    const int N = 1e5 + 10;
    
    // 定义一个结构体来存储每个工作的截止时间和利润
    struct node {
        int t, x;
    };
    
    // 定义一个数组来存储所有的工作
    node a[N];
    int n;
    
    // 比较函数,用于按照截止时间对工作进行排序
    bool cmp(node a, node b) {
        return a.t < b.t;
    }
    
    int main() {
        cin >> n;
        // 读取每个工作的截止时间和利润
        for (int i = 1; i <= n; i++) {
            cin >> a[i].t >> a[i].x;
        }
        
        // 按照截止时间对工作进行排序
        sort(a + 1, a + 1 + n, cmp);
        
        // 定义一个最小堆,用于存储当前选择的工作的利润
        priority_queue<int, vector<int>, greater<int>> q;
        ll ans = 0;
        
        // 遍历所有工作
        for (int i = 1; i <= n; i++) {
            // 如果当前工作的截止时间大于堆的大小,则将该工作加入堆中
            if (q.size() < a[i].t) {
                q.push(a[i].x);
                ans += a[i].x;
            }
            // 否则,如果当前工作的利润大于堆顶的利润,则替换堆顶的工作
            else if (q.size() && q.top() < a[i].x) {
                ans = ans - q.top() + a[i].x;
                q.pop();
                q.push(a[i].x);
            }
        }
        
        // 输出最大总利润
        cout << ans;
        return 0;
    }

     

标签:node,int,Work,工作,9564,Scheduling,排序,截止,利润
From: https://www.cnblogs.com/jyssh/p/18442066

相关文章

  • 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper
    恋爱虽易,相处不易:当EntityFramework爱上AutoMapper  剧情开始为何相爱?相处的问题?女人的伟大?剧情收尾?有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易,相处不易。在DDD(领域驱动设计)中,使用AutoMap......
  • DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(3)
    DDD领域驱动设计-谈谈Repository、IUnitOfWork和IDbContext的实践(3) 上一篇:《DDD领域驱动设计-谈谈Repository、IUnitOfWork和IDbContext的实践(2)》这篇文章主要是对 DDD.Sample 框架增加Transaction事务操作,以及增加了一些必要项目。虽然现在的IUnitOfWork实......
  • 问题记录:EntityFramework 一对一关系映射
    问题记录:EntityFramework一对一关系映射 EntityFramework一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码:publicclassTeacher{publicintId{get;set;}publicstringName{get;set;}publicvirtualStudentStudent{get;set;}......
  • 爱与恨的抉择:ASP.NET 5+EntityFramework 7
    爱与恨的抉择:ASP.NET5+EntityFramework7  EF7的纠缠ASP.NET5的无助忘不了你的好一开始列出的这个博文大纲,让我想到了很久之前的一篇博文:恋爱虽易,相处不易:当EntityFramework爱上AutoMapper,只不过这次的剧情换主角了,而且与EF和AutoMapper爱情故事不同的是,这次是......
  • EntityFramework.Extended 支持 MySql
    EntityFramework.Extended支持MySql EntityFramework.Extended默认不支持MySql,需要配置如下代码:[DbConfigurationType(typeof(DbContextConfiguration))]//增加配置publicclassSchoolDbContext:DbContext,IDbContext{publicSchoolDbContext()......
  • 虚拟机最后支持 Windows 7的版本是 VMware Workstation 15.5.7
    最新版的VMware已经不再支持Windows7系统了。通过搜寻官网的描述说明,最后的支持版本应该是 VMwareWorkstation15.5.717171714,Win7依然没有放弃使用,于是立即找出了该版本的官方下载地址:VMwareWorkstation15.5.7 | VMwareWorkstationfull15.5.7安装过程中需......
  • [GAN][图片异常检测]Unsupervised Anomaly Detection withGenerative Adversarial Net
    论文背景与目标:    本文旨在将GAN运用到图片异常检测中,并取得了一定的效果,该模型不仅能够检测已知的异常,还能够发现未曾标注的新异常。提出了结合GAN的生成和判别功能的新型异常评分方法。在无监督的前提下实现了异常图像的分割。通过利用GAN的潜在空间,提出了新的......
  • 在Robot Framework中Run Keyword If的用法
    基本用法使用ELSE使用ELSEIF使用内置变量使用Python表达式本文永久更新地址:在RobotFramework中,RunKeywordIf是一个条件执行的关键字,它允许根据某个条件来决定是否执行某个关键字。下面是RunKeywordIf的基本用法:RunKeywordIfconditionkeyword.........
  • .net 6和.net core 和.net framework 之间是什么关系
    ‌.NET 6、.NETCore和.NETFramework都是Microsoft开发的开发平台,但它们之间存在明显的区别和联系。‌‌.NETFramework‌是微软最早开发的开发平台,专为Windows设计,不支持跨平台运行。它为Windows应用提供了坚实的基础,但限制在了Windows操作系统上。‌.NETCore‌是.NET......
  • work.1
                 ......