POJ 3190 贪心+优先队列
来源:互联网 发布:安卓手机神器 知乎 编辑:程序博客网 时间:2024/05/16 23:56
这道题受到了以前做过的一道题目的影响,有n节课,每节课都有一个开始结束时间,求出一天中最多可以上多少节课,使得任意两节课时间不冲突。这道题目是按照结束时间递增的时间排序。
刚开始碰到这道题我就有感觉和以前那道题差不多,毕竟对于每一个stall,都是尽量的使得里面的区间最多。所以我就按照结束时间排序了。
但是这道题目怎么写呢?按照贪心的思想,我们肯定是想要每一个stall都是尽量满的,这样一来,使用的stall就会更少。所以假如现在已经有了n个stall,我们在考虑一个区间。我们该把这个区间放到哪个stall中去呢?还是我们要新增一个stall来放置这个区间?
为了使得空间尽量的不浪费,我们选择n个stall中剩余空间最大的那个来装置这个区间,如果可以装的下,就装在这里。如果装不下,那么其他的也装不下,我们就新增一个stall来安置这个区间。
但是这样一想,我们刚才按照结束时间排序的策略就不太合适了,我们想要所有区间排列的尽量紧密,那么我们应该先考虑左端点小的区间,这样才能结合的更紧密。也就是我们一开始要按照左端点递增来排序。
#include <map>#include <queue>#include <cstdio>#include <vector>#include <cstdlib>#include <iostream>#include <algorithm>#define MAX_N 50005using namespace std;struct data{ int l, r; int id; bool operator < (const data& b) const { return l < b.l; }};data dat[MAX_N];typedef pair<int, int> pii;//每个stall最后一个区间的结束时间,这个stall的编号priority_queue<pii, vector<pii>, greater<pii> > stalls;int main(){ //freopen("in.txt", "r", stdin); int N; int stall_id[MAX_N];//保存每个区间所在stall的编号 while (scanf("%d", &N) != EOF) { for (int i = 1; i <= N; i++) { scanf("%d%d", &dat[i].l, &dat[i].r); dat[i].id = i; } sort(dat + 1, dat + N + 1); int cnt = 1; stalls.push(pii(dat[1].r, cnt)); stall_id[dat[1].id] = cnt; for (int i = 2; i <= N; i++) { int ok = 0; if (!stalls.empty()) { pii t = stalls.top(); if (t.first < dat[i].l) { t.first = dat[i].r; stalls.pop(); stalls.push(pii(t)); stall_id[dat[i].id] = t.second; ok = 1; } } if (!ok) { cnt++; stalls.push(pii(dat[i].r, cnt)); stall_id[dat[i].id] = cnt; } } printf("%d\n", cnt); for (int i = 1; i <= N; i++) printf("%d\n", stall_id[i]); } return 0;}
0 0
- poj 3190 优先队列+贪心
- POJ 3190 贪心+优先队列
- poj 3190 贪心 + 优先队列优化
- POJ-3190-贪心(优先队列)
- poj 3190 贪心+优先队列优化
- Poj 3190 Stall Reservations【贪心+优先队列】
- poj 3190 贪心(区间)+优先队列维护
- POJ 1328 3190 贪心 优先队列
- POJ-3190-Stall Reservations-优先队列+贪心
- poj-2431 贪心+优先队列
- poj 2431 优先队列&贪心
- poj 2010 优先队列+贪心
- poj 2431 贪心+优先队列
- POJ 3253 贪心 优先队列
- POJ 3190 Stall Reservations(贪心+优先队列优化)
- POJ 3190 Stall Reservations 贪心+优先队列或set
- POJ 3190 Stall Reservations (贪心、优先队列/set)
- poj 3190 Stall Reservations(区间贪心,优先队列)
- GCD的8种搭配方式
- 趣闻
- 同一进程下的线程能共享的内容
- Spring单元测试
- hdu 2068
- POJ 3190 贪心+优先队列
- SSM(Spring+SpringMVC+MyBatis)三大框架整合及遇到的各种问题
- bitmap 转 wpf 的 imageSource
- 2.21
- JAVA之常用类2!!!
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
- 安装redis时遇到zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
- Ansible之 Inventory 资源清单介绍
- Single Number 3