题目链接:https://vjudge.net/problem/Kattis-entertainmentbox

题目大意:

  一种叫做不知道什么的盒子可以同时录 k 个节目,现给出 n 个节目的开始和结束时间,这个盒子最多能 “完整地” 录下多少个节目?

解题思路:

  贪心。

  训练的时候第一眼看见这道题就想起了《挑战》里面提到的 “区间调度问题”,乍看之下二者真的极为相似,但其实里面也有不同之处,但我的思维也被此局限住了。唉,弄了半天也弄不出个所以然,后来看了别人的题解才发现了自己哪里错了,真的好烦啊。感觉最近几天有点浮躁,要静下心来呀,骚年。

  首先,将 n 个节目根据结束时间由早到晚排序这一点应该是很明确的,我们应该尽可能地选择早结束的,读者可以去翻阅一下《挑战程序设计竞赛》中的 “区间调度问题”。接下来的做法,我一开始是这么想的:弄一个队列,保存所有已经选取的节目的结束时间。一开始先让排序好的前 k 个结束时间入队。后来再让新节目入队的时候,如果它的开始时间晚于队首的结束时间,那么 pop 队首,让新节目的结束时间入队。后来想想自己真的是 too native. 随便一组数据就能推翻:

  n=3,k=2.

  1 10

  2 5

  6 9

  后来又改变了几次思路,但通通不对,因为我没有抓住问题的本质,真的好燥啊!!!

  其实这道题真正的贪心法则,应该是:每次选择是否要录制一个节目的时候,要从正在录制的队列中选择一个结束时间 “最接近” 我们正在考虑的节目的开始时间的节目,将这个节目从队列中 erase 掉,再把正在考虑的节目加进去。如果已有队列中所有节目的结束时间都在我们正考虑的节目的开始时间之后,那么如果已有队列中的节目小于 k,那么就直接把正在考虑的节目加入队列,否则的话就 continue.

  实现方面,我是用 vector 和 upper_bound,一开始在 vector 中放入 k 个 0,代表没有节目正在录制。请看代码。

AC代码:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=;
typedef pair<int,int> P;
P rec[maxn];
bool cmp(const P &a,const P &b){
if(a.second==b.second) return a.first>b.first;
return a.second<b.second;
}
int main()
{
vector<int> que;
vector<int>::iterator iter;
int n,k;
scanf("%d%d",&n,&k);
for(int i=;i<n;i++) scanf("%d%d",&rec[i].first,&rec[i].second);
sort(rec,rec+n,cmp);
int ans=;
for(int i=;i<k;i++) que.push_back();
for(int i=;i<n;i++){
iter=upper_bound(que.begin(),que.end(),rec[i].first);
if(iter!=que.begin()){
que.erase(iter-);
que.push_back(rec[i].second);
ans++;
}
}
printf("%d\n",ans);
return ;
}

Kattis - entertainmentbox的更多相关文章

  1. Kattis - entertainmentbox 【贪心】

    思路 先将 N 个 电视节目 排序 根据 结束时间 ,结束的早的 排在前面 然后 弄 K个标记 记录 结束时间 然后 遍历一下 每次 如果能插入的话 插入到 结束时间最小的那个 队列里面去然后 每次插 ...

  2. It's a Mod, Mod, Mod, Mod World Kattis - itsamodmodmodmodworld (等差数列求和取模)

    题目链接: D - It's a Mod, Mod, Mod, Mod World Kattis - itsamodmodmodmodworld 具体的每个参数的代表什么直接看题面就好了. AC代码: ...

  3. A - Piece of Cake Kattis - pieceofcake (数学)

    题目链接: A - Piece of Cake Kattis - pieceofcake 题目大意:给你一个多边形,然后给你这个多边形的每个点的坐标,让你从这个n个点中选出k个点,问这个k个点形成的面 ...

  4. Subsequences in Substrings Kattis - subsequencesinsubstrings (暴力)

    题目链接: Subsequences in Substrings Kattis - subsequencesinsubstrings 题目大意:给你字符串s和t.然后让你在s的所有连续子串中,找出这些 ...

  5. G - Intersecting Rectangles Kattis - intersectingrectangles (扫描线)(判断多个矩形相交)

    题目链接: G - Intersecting Rectangles Kattis - intersectingrectangles 题目大意:给你n个矩形,每一个矩形给你这个矩形的左下角的坐标和右上角 ...

  6. E - Emptying the Baltic Kattis - emptyingbaltic (dijkstra堆优化)

    题目链接: E - Emptying the Baltic Kattis - emptyingbaltic 题目大意:n*m的地图, 每个格子有一个海拔高度, 当海拔<0的时候有水. 现在在(x ...

  7. G - Galactic Collegiate Programming Contest Kattis - gcpc (set使用)

    题目链接: G - Galactic Collegiate Programming Contest Kattis - gcpc 题目大意:当前有n个人,一共有m次提交记录,每一次的提交包括两个数,st ...

  8. Kattis - virus【字符串】

    Kattis - virus[字符串] 题意 有一个正常的DNA序列,然后被病毒破坏.病毒可以植入一段DNA序列,这段插入DNA序列是可以删除正常DNA序列中的一个连续片段的. 简单来说就是,给你一段 ...

  9. Kattis - bank 【简单DP】

    Kattis - bank [简单DP] Description Oliver is a manager of a bank near KTH and wants to close soon. The ...

随机推荐

  1. Libra教程之:数据结构和存储

    文章目录 存储的数据结构 账本历史 账本状态 账户 事件 前面的文章我们知道,libra会把所有的数据都存储在账本中.为了方便业务逻辑和数据的校验,这个存储是以特定的数据结构来实现的,这里我们叫做验证 ...

  2. OC的消息机制简单介绍

    在OC的消息机制中主要分为三个阶段,分别为: 1.消息发送阶段:从类以及父类的方法缓存列表和方法列表查找方法. 2.动态解析阶段:在消息发送阶段没有找到方法,则会进入这个阶段,负责动态添加方法实现. ...

  3. swift 3.0字符串的简单使用

    let str:String = "12314124" 获取某个指定位置的元素 print(str.characters[str.index(str.startIndex, off ...

  4. 通过express框架为前端提供api(数据),妈妈再也不用担心后端不给我数据了~

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 首先,确保自己安装了express框架. 没有安装的同学可以参照下面这篇博 ...

  5. JavaScript 后台获取数据 - HTTP203 Advent(中文字幕)

    如果关注过 Google 相关的开发技术,对 HTTP203 这个栏目应该不陌生. 这是 HTTP203 圣诞节的特别版! Jake(@jaffathecake)和 Surma(@DasSurma)有 ...

  6. Jaba_Web--JDBC 查询记录操作模板

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  7. 图论--割点--Tarjan

    #include<iostream> #include<stdio.h> #include<vector> using namespace std; const i ...

  8. CF1328B K-th Beautiful String

    CF1328B K-th Beautiful String,然而CF今天却上不去了,这是洛谷的链接 题意 一个长度为\(n\)的字符串,有2个\(\texttt{b}\)和\(n-2\)个\(\tex ...

  9. PyCharm 集成 SVN,检出、提交代码

    1.安装 SVN,解决 SVN 目录中没有 svn.exe 问题 重新打开 TortoiseSVN 安装文件 选择 Modify 后在command line client tools 选项修改为 W ...

  10. Programming Languages_05 FWAE

    FWAE : Concrete syntax <FWAE> ::= <num> | {+ <FWAE> <FWAE>} | {- <FWAE> ...