HDU 5360 Hiking(优先队列)

Hiking

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 492    Accepted Submission(s): 263

Special Judge

Problem Description

There are  soda
conveniently labeled by .
beta, their best friends, wants to invite some soda to go hiking. The -th
soda will go hiking if the total number of soda that go hiking except him is no less than  and
no larger than .
beta will follow the rules below to invite soda one by one:

1. he selects a soda not invited before;

2. he tells soda the number of soda who agree to go hiking by now;

3. soda will agree or disagree according to the number he hears.

Note: beta will always tell the truth and soda will agree if and only if the number he hears is no less than  and
no larger than ,
otherwise he will disagree. Once soda agrees to go hiking he will not regret even if the final total number fails to meet some soda‘s will.

Help beta design an invitation order that the number of soda who agree to go hiking is maximum.

Input

There are multiple test cases. The first line of input contains an integer ,
indicating the number of test cases. For each test case:

The first contains an integer  ,
the number of soda. The second line constains  integers

时间: 2024-12-11 15:26:13

HDU 5360 Hiking(优先队列)的相关文章

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

题目:http://acm.hdu.edu.cn/showproblem.php? pid=5360 题意:beta有n个朋友,beta要邀请他的朋友go hiking,已知每一个朋友的理想人数[L,R](现有L~R个人准备去,那么这个朋友就去). 求最多有多少人去. 及beta邀请朋友的顺序. 分析:每次邀请人的最优解就是:选会去的人里面R最小的那个人. 代码实现的话,cur代表已经准备go hiking的人数,每次将全部L<=cur的人放进优先队列,选出R最小的那个. 假设队列为空,那么剩下

HDU 5360 Hiking (贪心+优先队列)

本文纯属原创,转载注明出处:http://blog.csdn.net/zip_fan.谢谢. 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5360 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Special Judge Problem Description There are n soda conveniently la

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

Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 118    Accepted Submission(s): 69Special Judge Problem Description There are n soda conveniently labeled by 1,2,…,n. beta, their best fri

HDOJ 5360 Hiking 优先队列+贪心

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意: 大概的意思就是每个人有个人数接受范围$[l_i,r_i]$,现在你每次能从还未被选取的人中选择一个人,如果当前人数符合这个人的需求,那么这个人就会被选中.现在让你输出一个选择的序列,使得被选择的人数尽量多. 题解: 就贪心就好,总的来说就是人数不断增大的时候,每次从可行的所有$l$中选择$r$最小的那个.至于为什么这样是最优的..需要脑补. 代码: #include<iostream>

hdu 5360 贪心+优先队列

贪心的思路还是比较好想的,每次选择cur(已经邀请成功的人数)所在的区间中右端点最小的(因为右端点大的在后面可以邀请成功的几率大),然后很自然的想到可以用一个优先队列来维护这些区间,只要每次把左端点小于等于cur的区间放到优先队列中即可. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <vector> 5 #include <queue> 6 u

HDU 5360 Hiking(线段树)

题意: n个人接受邀请的条件是已经接受邀请的人数区间在l[i] , r[i] 问怎样设置邀请顺序能使得接受邀请的人数最多 解析: 先对区间从小按照右边界从小到大排序,如果右边界相同,再按照左边界从小到大排序.因为右边界越小优先级越高,左边界同理. 如果用优先队列,是算出选择当前人选择哪个区间是最优的. 由于本人不会两个条件的优先队列,所以只能换了一种写法来写. 于是我想到了线段树,逆向思维,利用线段树来维护这个区间选择哪个人是最优的. 选择完这个人之后,将这个人置为无穷大并维护线段树. 并记录下

hdu 5360 Hiking

#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; const int N=100000+5; struct node { int st,ed,id; friend bool operator < (node n1,node n2) { return n2.ed<n1.ed; } }p[N]; priority_

HDU 5360(2015多校6)-Hiking(优先队列)

题目地址:HDU 5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须满足c>=l[i]&&c<=ri,问你邀请的顺序是什么才能使尽可能多的人去远足,若有多个最优解,输出任意的一个. 思路:先按照L从小到到排序,把当前符合的L放入优先队列中 ,然后对队列中的R从小到大排序,贪心的选择R小的,然后乱搞一番就可以了. #include <stdio.h> #include <math.h> #includ

HDU 1242 Rescue(优先队列+bfs)

题目地址:HDU 1242 这个题相比于普通的bfs有个特殊的地方,经过士兵时会额外消耗时间,也就是说此时最先搜到的时候不一定是用时最短的了.需要全部搜一遍才可以.这时候优先队列的好处就显现出来了.利用优先队列,可以让队列中的元素按时间排序,让先出来的总是时间短的,这样的话,最先搜到的一定是时间短的,就不用全部搜一遍了.PS:我是为了学优先队列做的这题..不是为了这题而现学的优先队列.. 代码如下: #include <iostream> #include <stdio.h> #i