uva 1442:Cave(贪心)】的更多相关文章

题意:一个洞穴长n,告诉你每个位置的地面高度和顶部高度,让你往里灌水,要求水不能碰到天花板(但可以无限接近).求最多的水量.(洞穴两边视为封闭) 思路:如果知道一个位置向左看最高可以多高,向右看最高可以多高,就可以知道这个位置最终的高度了.方法是扫两次.每次扫的时候,定义一个之前最高值.若之前最高值高于现在的顶,则下降至顶.若低于底,则上升至底(因为后面的这种高度能被这个底挡住).如果在中间则不用变. 代码: #include <cstdio> #include <cstring>…
题意:有一个洞穴,每个位置有一个底的高度p[i],和对应顶的高度s[i],要往里面尽量放燃料,要求燃料不能碰到顶,可以无限接近. 题解:制约燃料储放的就是顶的高度了,分别求出设当前储放位置的向两边的延伸不会碰到顶的最大高度. 设当前最大高度为level,起始位置为顶高,移动到下一格的时如果碰到顶,那么降低到s[i],如果小于p[i],那么就就提高到p[i]. 两边都扫一遍,然后取最小高度. 试了试输入优化,对于这种大量数据输入效果不错,节省了大约100ms. #include<bits/stdc…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4188 题意: 一个洞穴的宽度由n(n≤1e6)个片段组成.已知位置[i,i+1]处的地面高度pi和顶的高度si(0≤pi<si≤1000),要求在这个洞穴里储存尽量多的燃料,使得在任何位置燃料都不会碰到顶(但是可以无限接近). 分析: 扫描法.为了方便起见,下面用“水”来代替…
对于一个水坑,水平面肯定是相等的.(废话,不然为什么叫水ping面) 因为水面不能碰到天花板,所以将水面向两边延伸要么碰到墙壁要么延伸到洞穴外面去. 设h(i)表示向左延伸不会碰到天花板的最高水平面,可以线性从左往右扫描计算出来. 用level标记当前水平面高度,level初始为s[0] 如果p[i] > level,说明水遇到墙壁了,需要把水面提到p[i]上来 如果s[i] < level,说明水遇到天花板了,需要把水面降到s[i]去 否则,他们都在同一个水坑里面,水位高度不变 同理,从右往…
题意:有n个长度为1的线段,确定它们的起点,使得第i个线段在[ri,di]之间,输出空隙数目的最小值. 析:很明显的贪心题,贪心策略是这样的,先把所有的区间排序,原则是按右端点进行排序,如果相等再按左端点排,然后再扫一遍,如果第一个区间的右端点和第二个右端点一样, 一定可以相邻,如果不相等,再看是不是与左端点大小关系,如果小于左端点,那么就一定会产生空隙,如果不是小于,就可以,那么端点要向右移动一个单位,其他的也样判断. 代码如下: #include <cstdio> #include <…
题目链接:uva 1346 - Songs 题目大意:John Doe 是一个著名的DJ,现在他有n首播放个曲, 每首歌曲有识别符key,歌曲长度l,以及播放频率q.想在John Doe 想将磁带上的歌曲重新排列,方便播放,播放所有歌曲有一个复杂度的计算∑(1≤i≤n)q[i] * ( ∑(1≤j≤i)l[j] ), 然后给出S,请输出重新排列后的第S首歌的识别码. 解题思路:为了使得复杂度越小,很明显的曲目长度小的要放前面,播放频率小的要放后面,所以每首歌增加一个k = l / q,即k越小的…
题意:有6种箱子,1x1 2x2 3x3 4x4 5x5 6x6,已知每种箱子的数量,要用6x6的箱子把全部箱子都装进去,问需要几个. 一开始以为能箱子套箱子,原来不是... 装箱规则:可以把箱子都看成正方体,装在6x6的盒子里. 典型的贪心题. 思路:(参考了Starginer大神的) ①每个6*6的都占一个箱子. ②每个5*5的放在一个箱子里,同时里面还能装11个1*1的. ③每个4*4的放在一个箱子里,同时里面还能装5个2*2的,如果2*2的不够了,那么还能放1*1的. ④每4个3*3的放…
思路:就是把J大的放在前面.为什么这样贪心呢? 看看这个图 #include<iostream> #include<algorithm> #include<vector> using namespace std; struct node{ int x, y; bool operator < (const node &b) const{ return y>a.y; } }; int n, t, x, y; int main(){ while(cin&g…
本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有包含关系的时候怎么选, 然后发现当两个区间只能放一个的时候时间更短而截 至时间更长的时候,显然更优.然后我就试着每个区间放的时候后后面的比较, 如果两个区间只能放一个, 而且 下个区间更优, 那么当前的就不选.然后排除掉这些区间之后, 能选的就选. 交上去WA.然后我发现中间的区间排除了,但是前面和后面的区间…
这道题我很快就写出来了, 但是一直WA, 然后发现是精度, 这坑了我一个小时-- (1)贪心.每次就尽量分数高, 可以保证最后分数最高 (2)神tm精度问题.记住判断大于小于和等于的时候要用EPS(1e-6) a == b                  fabs(a-b) < EPS a != b                  fabs(a-b) > EPS a < b                   a + EPS < b a <= b             …