1032 AlvinZH的学霸养成记II

思路

中等题,贪心。

所有课程按照DDL的大小来排序。

维护一个当前时间curTime,初始为0。

遍历课程,curTime加上此课程持续时间d,如果这时curTime大于此课程DDL,表示无法学习此课程,但是我们不减去此课程,而是减去用时最长的那门课程(优先队列队首,课时最长)。

贪心:

假设当前课程为B,被替换课程为A,则有A.d≥B.d,A.e≤B.e。既然curTime+A.d≤A.e,那么curTime+B.d≤B.e绝对成立,保证了B的合法性。

替换之后可学习课程数量没变,但是curTime变小了,有可能可选择更多课程,局部最优策略。

分析

Time complexity : \(O(nlog(n))\).

Space complexity: \(O(n)\).

参考代码

//
// Created by AlvinZH on 2017/11/26.
// Copyright (c) AlvinZH. All rights reserved.
// #include<cstdio>
#include<algorithm>
#include<iostream>
#include <queue>
using namespace std; int n;
struct Course {
int d, e;
}C[100005]; bool cmp(Course p, Course q) {
return (p.e < q.e);
} int main()
{
while(~scanf("%d", &n))
{
for(int i = 1; i <= n; i++)
scanf("%d%d", &C[i].d, &C[i].e); sort(C+1, C+n+1, cmp);//按课程的DDL排序 int curTime = 0;
priority_queue<int> Q;
for(int i = 1; i <=n; ++i) {
curTime += C[i].d;
Q.push(C[i].d);
if(curTime > C[i].e) {
curTime -= Q.top();
Q.pop();
}
} printf("%d\n", Q.size());
}
}

最新文章

  1. Datazen安装
  2. HowTo系列之virtualenv
  3. machine learning-----&gt;Amazon Machine Learning机器学习平台
  4. 说说C#的async和await 解决卡顿问题 转
  5. Linux与Windows API对比
  6. oGrid 初探
  7. java:正则移出html元素
  8. PHP V5.2 中的新增功能,第 1 部分: 使用新的内存管理器
  9. Linux平台下利用系统接口函数按照行读写文件
  10. SQLite&amp;&amp;SharedPreferences&amp;&amp;IO读写Sdcard学习笔记
  11. java集合框架复习
  12. Git教程(8)Git几种工作方式
  13. WPF 分页控件 WPF 多线程 BackgroundWorker
  14. javascript 多图无缝切换
  15. 格而知之7:我所理解的Runtime(2)
  16. java 中间 final修饰符
  17. EasyUI combox实现联动
  18. android app 集成 信鸽推送
  19. pom文件说明
  20. Javascript DOM 编程艺术———总结-1

热门文章

  1. $_SERVER[&quot;HTTP_HOST&quot;]
  2. VMWare 虚拟机挂载 Homestead NFS 进行老项目(基于 Brophp)维护
  3. [Java] 获取当前Project所在的路径
  4. Spring JMX之一:使用JMX管理Spring Bean
  5. jquery破坏链
  6. Linux服务器上如何设置MySQL的max_allowed_packe
  7. CoreDNS for kubernetes Service Discovery
  8. BASE64Encoder及BASE64Decoder编译器找不到问题
  9. Zookeeper客户端cli_st为何在crontab中运行不正常?
  10. 程序员不常用Linux命令集