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());
}
}

2016级算法第六次上机-C.AlvinZH的学霸养成记II的更多相关文章

  1. 2016级算法第六次上机-F.AlvinZH的学霸养成记VI

    1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那 ...

  2. 2016级算法第六次上机-D.AlvinZH的学霸养成记V

    1081 AlvinZH的学霸养成记V 思路 中等题,计算几何. 这是一个排序问题,按极角排序.可以转化为叉积的应用,对于点A和B,通过叉积可以判断角度大小,共线时再判断距离. 叉积的应用.OA × ...

  3. 2016级算法第五次上机-E.AlvinZH的学霸养成记IV

    1039 AlvinZH的学霸养成记IV 思路 难题,最大二分图匹配. 难点在于如何转化问题,n对n,一个只能攻击一个,判断是否存在一种攻击方案我方不死团灭对方.可以想到把所有随从看作点,对于可攻击的 ...

  4. 2016级算法第五次上机-D.AlvinZH的学霸养成记III

    850 AlvinZH的学霸养成记III 思路 难题.概率DP. 第一种思考方式:直接DP dp[i]:从已经有i个学霸到所有人变成学霸的期望. 那么答案为dp[1],需要从后往前逆推.对于某一天,有 ...

  5. 2016级算法第六次上机-E.Bamboo之吃我一拳

    Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...

  6. 2016级算法第六次上机-A.Bamboo之寻找小金刚

    Bamboo之寻找小金刚 分析 可以抽象为许多连续线段,分别计数左拐和右拐的个数.考察叉积的基础应用. 假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角.考虑线段AB和BC形成的向量 ...

  7. 2016级算法第六次上机-G.ModricWang likes geometry

    1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码

  8. 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION

    1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...

  9. 2016级算法第四次上机-F.AlvinZH的最“长”公共子序列

    940 AlvinZH的最"长"公共子序列 思路 DP,难题. \(dp[i][j]\) :记录A的前i个字符与B的前j个字符变成相同需要的最小操作数. 初始化:dp[i][0] ...

随机推荐

  1. archiver error. Connect internal only, until freed. 之解决办法

    这个报错说的是数据库的日志备份不足空间.解决办法: DELETE backup COMPLETED BEFORE 'SYSDATE-7';DELETE ARCHIVELOG ALL COMPLETED ...

  2. 不要怂,就是GAN (生成式对抗网络) (一): GAN 简介

    前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodf ...

  3. CMake使用技巧集

    1.注意CMake不允许出现相同的目标名称,即使是不同的目录下的CMakeLists.txt 2.将头文件搜索路径插入到其它的前面: include_directories(BEFORE /tmp) ...

  4. EBS增加客制应用CUX:Custom Application

    1. 创建数据库文件和帐号 [root@ebs12vis oracle]# su - oracle[oracle@ebs12vis ~]$ sqlplus / as sysdba SQL*Plus: ...

  5. Javascript Promises 介绍

    什么是 Promises Promises是一种关于异步编程的规范,目的是将异步处理对象和处理规则进行规范化,为异步编程提供统一接口.   传统的回调函数 说到JavaScript的异步编程处理,通常 ...

  6. prog1,2,3

    1.第一版本程序Prog1:+ 给定一个数组,实现数组元素求和:具体要求:实现对一维数组(a[100])的所有元素相加运算.+ 数据准备:a)数组长度:100:b)数组数据来源:实验数据A列:1~10 ...

  7. iperf命令 +speedtest-cli

    iperf工具可以用来测量TCP或者是UDP的网络吞吐量,即bandwidth(带宽)测试.  iPerf的主要目标是帮助调整特定路径上的TCP连接. 众所周知,TCP最基本的调整问题是调整TCP窗口 ...

  8. nancyfx中的静态内容文件夹

    原文件 DefaultStaticContentsConventions.cs 可以根据需要自定调整,在代码里改的好处是通用.如果通过在webconfig里设置的话,在非iis环境下,可能会有问题. ...

  9. 使用Array.prototype.indexOf()的几点注意

    对应indexOf这个方法,在日常开发中比较常见的应该是String.prototype.indexOf()方法,Array.prototype.indexOf()方法和其有很大的相似性,本文不想去描 ...

  10. [Erlang27]如何监控指定目录下的*.beam文件,如果有改动就更新到指定的节点?

    在Erlang In Anger第二章中讲到使用rebar来创建一个Erlang项目(Application或Project) 但美中不足的只是给出了指引,但没有给出详细的步骤. 下面我们就使用reb ...