原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360

题意:

大概的意思就是每个人有个人数接受范围$[l_i,r_i]$,现在你每次能从还未被选取的人中选择一个人,如果当前人数符合这个人的需求,那么这个人就会被选中。现在让你输出一个选择的序列,使得被选择的人数尽量多。

题解:

就贪心就好,总的来说就是人数不断增大的时候,每次从可行的所有$l$中选择$r$最小的那个。至于为什么这样是最优的。。需要脑补。

代码:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<functional>
#define MAX_N 100005
using namespace std; struct node {
public:
int val;
int pos; node(int v, int p) : val(v), pos(p) { } node() { } bool operator<(const node &a) const {
return val > a.val;
}
}; priority_queue<node> que; int n;
int T; vector<node> L[MAX_N];
vector<int> G;
int l[MAX_N],r[MAX_N]; bool used[MAX_N]; void init() {
for (int i = ; i <= n; i++)L[i].clear();
memset(used,,sizeof(used));
G.clear();
while (que.size())que.pop();
} int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
init();
for (int i = ; i < n; i++)
scanf("%d", &l[i]);
for (int i = ; i < n; i++)
scanf("%d", &r[i]);
for (int i = ; i < n; i++)
L[l[i]].push_back(node(r[i], i + ));
int ans = ;
for (int i = ; i <= n; i++) {
for (int j = ; j < L[i].size(); j++)que.push(L[i][j]);
while (que.size() && que.top().val < i)que.pop();
if (que.empty()) {
ans = i;
break;
}
G.push_back(que.top().pos);
que.pop();
}
printf("%d\n", ans);
for (int i = ; i < G.size(); i++) {
printf("%d ", G[i]);
used[G[i]] = ;
}
for (int i = ; i <= n; i++)if (!used[i])printf("%d ", i);
printf("\n"); }
return ;
}

HDOJ 5360 Hiking 优先队列+贪心的更多相关文章

  1. hdu 5360 Hiking(优先队列+贪心)

    题目:http://acm.hdu.edu.cn/showproblem.php? pid=5360 题意:beta有n个朋友,beta要邀请他的朋友go hiking,已知每一个朋友的理想人数[L, ...

  2. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...

  3. HDU 5360——Hiking——————【贪心+优先队列】

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  4. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  5. HDU 5360 【优先队列+贪心】

    题意: 给定N个无序区间. 对合法区间的定义是: 在这个区间之前已经选出了至少l个合法区间,最多选出了r个合法区间.则该区间为合法区间. 输出最多能挑选出多少个合法区间,并输出合法区间的数量. 思路: ...

  6. 2015多校第6场 HDU 5360 Hiking 贪心,优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...

  7. 最高的奖励 - 优先队列&贪心 / 并查集

    题目地址:http://www.51cpc.com/web/problem.php?id=1587 Summarize: 优先队列&贪心: 1. 按价值最高排序,价值相同则按完成时间越晚为先: ...

  8. POJ2431 优先队列+贪心 - biaobiao88

    以下代码可对结构体数组中的元素进行排序,也差不多算是一个小小的模板了吧 #include<iostream> #include<algorithm> using namespa ...

  9. hdu3438 Buy and Resell(优先队列+贪心)

    Buy and Resell Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

随机推荐

  1. 请问batch_normalization做了normalization后为什么要变回来?

    请问batch_normalization做了normalization后为什么要变回来? 请问batch_normalization做了normalization后为什么要变回来? - 莫驚蟄的回答 ...

  2. 水题:51Nod1095-Anigram单词

    1095 Anigram单词 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 Description 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那 ...

  3. vijos--繁华的都市

    描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路 ...

  4. c++ override 关键字

    描述:override保留字表示当前函数重写了基类的虚函数. 目的:1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的):2.强制编译器检查 ...

  5. 《Scrum实战》第2次课【取得大家的支持】课后作业汇总

    作业:<变革之心>读后感 孟帅: 2017-7-12http://www.cnblogs.com/mengshuai1982/p/7153985.html

  6. how can I ues Dataset to shuffle a large whole dataset?

    The Dataset.shuffle() implementation is designed for data that could be shuffled in memory; we're co ...

  7. [git 学习篇] 提交文件

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d ...

  8. 101 Hack 50

    101 Hack 50 闲来无事.也静不下心,打个代码压压压惊 Hard Questions by kevinsogo Vincent and Catherine are classmates who ...

  9. sqlserver的left join优化

    MS sqlserver 对4张表进行left join join字段是varchar类型长度20,也都建了索引,但是光查一个count(Id) 耗时就超过了8秒,数据量只有100多万条,该怎么优化呢 ...

  10. 微软工具Sysinternals Suite

    工具:Sysinternals Suite 一个可以看进程的工具.