挑战程序设计竞赛》P345 观看计划
《挑战程序设计竞赛》P345 观看计划
题意:一周一共有M个单位的时间。一共有N部动画在每周si时开始播放,ti时刻播放结束,问每周最多能看多少部动画。
思路:贪心+倍增法
可以看成一个圆周上有N个区间,找出N个区间中尽可能多的互不相交的区间。选定一个区间作为起始区间后,贪心思想是:每次尽量选取与当前区间不重合且结束时间最早的区间。
那么贪心策略还可以这样考虑,对于某区间i,选择区间j满足(i的结束时间t[i]<j的开始时间s[j]),从这些j中选择一个结束时间最早区间(记为k)作为区间i的下一个区间,记为next[i]=k;
有了next数组即可倍增来优化了,譬如next[1][i]=j,next[1][j]=k,则next[2][i]=k,意为i跨两个区间可以到达区间k.
参考代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
#define INF 0x3f
#define N_MAX 100000+20
#define NLOG 30
pair<int, int>ps[*N_MAX];
int s[N_MAX*+],t[N_MAX*+];
int Next[NLOG][N_MAX];
int n, m; bool cmp(const pair<int,int>p1,const pair<int,int>p2) {
if (p1.first != p2.first)return p1.first < p2.first;
else return p1.second > p2.second;//若某一个区间头部和另一个区间的尾部时间点重合,尾部在前!!
} int main() {
while (scanf("%d%d",&n,&m)!=EOF) {
for (int i = ; i < n; i++) {
scanf("%d%d",&s[i],&t[i]);
}
for (int i = ; i < n;i++) {
if (s[i] > t[i])t[i] += m;
s[i + n] = s[i] + m;
t[i + n] = t[i] + m;
}
for (int i = ; i < *n;i++) {
ps[i] = make_pair(s[i], i);//区间头部
ps[i+*n] = make_pair(t[i], i+*n);//区间尾部
}
sort(ps, ps + * n,cmp);
int last = -;
memset(Next,-,sizeof(Next));
for (int i = *n-; i >=;i--) {//!!!!!
int id = ps[i].second;
if (id < * n) {
if (last == - || t[last] > t[id]) last = id;
}
else {
id -= * n;
Next[][id] = last;
}
}
for (int k = ; k +< NLOG;k++) {
for (int i = ; i < *n;i++) {
if (Next[k][i] == -)Next[k + ][i] = -;
else
Next[k + ][i] = Next[k][Next[k][i]];
}
}
int max_cnt = ;
for (int i = ; i < n;i++) {//选定一个初始城市
int j = i,cnt=;//j代表当前所在城市
for (int k = NLOG - ; k >= ;k--) {
if (Next[k][j] >= && t[Next[k][j]] <= s[i] + m) {
j = Next[k][j];
cnt |= << k;
}
}
max_cnt = max(max_cnt, cnt+);//不要忘了一开始选为起点的区间
}
printf("%d\n",max_cnt);
}
return ;
}
挑战程序设计竞赛》P345 观看计划的更多相关文章
- Aizu 2249Road Construction 单源最短路变形《挑战程序设计竞赛》模板题
King Mercer is the king of ACM kingdom. There are one capital and some cities in his kingdom. Amazin ...
- 《挑战程序设计竞赛》2.3 动态规划-优化递推 POJ1742 3046 3181
POJ1742 http://poj.org/problem?id=1742 题意 有n种面额的硬币,面额个数分别为Ai.Ci,求最多能搭配出几种不超过m的金额? 思路 据说这是传说中的男人8题呢,对 ...
- POJ 2386 Lake Counting 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=2386 <挑战程序设计竞赛>习题 题目描述Description Due to recent rains, water has ...
- poj 3253 Fence Repair 贪心 最小堆 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=3253 题解 本题是<挑战程序设计>一书的例题 根据树中描述 所有切割的代价 可以形成一颗二叉树 而最后的代价总和是与子节点和深 ...
- 《挑战程序设计竞赛》 4.1.1 矩阵 P286
想写几篇挑战的感悟,也有助于自己理解这本书.但这上面大多贴的是书上的代码,主要是为了用的时候后直接复制就好了,这样就很方便了,就相当于黑盒模板了. 1.线性方程组 /** \brief 高斯消元法 * ...
- poj1182食物链_并查集_挑战程序设计竞赛例题
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65534 Accepted: 19321 Description ...
- 迷宫问题_BFS_挑战程序设计竞赛p34
给定一个N*M的迷宫,求从起点到终点的最小步数. N,M<100: 输入: 10 10#S######.#......#..#.#.##.##.#.#........##.##.####.... ...
- 【网络流#9】POJ 2135 Farm Tour 最小费用流 - 《挑战程序设计竞赛》例题
[题意]给出一张无向图,从1开始到n,求两条没有公共边的最短路,使得路程总和最小 每条边的权值设为费用,最大流量设为1,然后就是从源点到汇点流量为2的最小费用流. 因为是规定了流量,新建一个源点和一个 ...
- 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题
[题意]有n个程序,分别在两个内核中运行,程序i在内核A上运行代价为ai,在内核B上运行的代价为bi,现在有程序间数据交换,如果两个程序在同一核上运行,则不产生额外代价,在不同核上运行则产生Cij的额 ...
随机推荐
- runtime运行时,类、对象、isa指针
先查看一段OC源码,关于类的定义: /// An opaque type that represents an Objective-C class. typedef struct objc_class ...
- C# 界面跳转-登陆之后跳转至主窗口
在登陆按钮验证成功之后可以将会话结果改为OK //验证通过之后将对话结果设置为OK(之后会载入主界面) this.DialogResult = DialogResult.OK; this.Dispos ...
- 1043: [HAOI2008]下落的圆盘
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1725 Solved: 743[Submit][Status][Discuss] Descripti ...
- Linux IO调度方法
目录 I/O调度的4种算法 I/O调度程序的测试 ionice IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电 ...
- JavaScript常用八种继承方案
更新:在常用七种继承方案的基础之上增加了ES6的类继承,所以现在变成八种啦,欢迎加高级前端进阶群一起学习(文末). --- 2018.10.30 1.原型链继承 构造函数.原型和实例之间的关系:每个构 ...
- 学习pytho第五天 循环
age_of_Bob = 56#定义年龄 count = 0#头部计数 while True:#while循环 if count ==3:#如果次数==3: break#退出 guess_age = ...
- 海量数据处理算法—BitMap
1. Bit Map算法简介 来自于<编程珠玑>.所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空 ...
- [原]sencha touch之NavigationView
还是直接上代码,都是基本的几个容器控件,没什么还说的 Ext.application({ name:'itkingApp', launch:function(){ var view =Ext.crea ...
- sql server 不可见字符处理 总结
前言 问题描述:在表列里有肉眼不可见字符,导致一些更新或插入失败. 几年前第一次碰见这种问题是在读取考勤机人员信息时碰见的,折腾了一点时间,现在又碰到了还有点新发现就顺便一起记录下. 如下图所示 go ...
- Maven web项目的项目如何创建
1.eclipse--创建maven项目--选择打包方式为war 2.此时项目还缺少一些东西,比如web-inf,web.xml配置文件之类的 3.项目右键-properties-project fa ...