ZOJ贪心算法_题目

ZOJ贪心算法_题目(转)

#1117 经典贪心,哈夫曼编码。
#1184 硬币称重,经典,1.若被判平,左右所有球必正常;2.若判轻或判重,对应球被判轻、重记数+1;3.只有球只被判轻或判重,且次数跟天平不平衡次数相等,该球才能是坏的,否则必然是好的。
#1409 求最佳带宽价格比,其中带宽为所有组件的带宽最小值,价格为各个组件价格总和,用贪心即可:记录所有可能的带宽,然后枚举带宽求最优价格值,直接贪心得到当时的比例更新最大值。
#1543 将原式稍微展开,发现各个数字分别被开方了 N 次,N-1 次...剩下因子是不变常数。因此贪心让大的数先结合,预排序即可。
#2067 数矩形,保存每个格子同以行往右最多的白格子数(包括自身),然后作 O(n^3) 的枚举。
#2109 肥老鼠系列:简单的贪心即可,从最大比例的入手。
#2229 骑车上学,贪心,O(n),枚举所有车子,如果:1. 开始时间 < 0 的,不予考虑,太快的赶不上,太慢的赶上也没用。2. 开始时间 > 0 的,Charley 和最早到达的车子一起到达。
#2256 计程车计费的策略,怎么坐最便宜:当有整 8 公里以上,换成 18 块钱。有剩下的,如果剩下 5 块以下,按 2.4 块每公里算。当然,这里必须是在输入为 8 公里以上才能这样算。否则的话,按照先跑 10 公里,再跑 2 元每公里算。
#2376 所有蚁碰头后不改方向互换身份,因此等价于只会直走互相穿透。
#2397 田忌赛马,经典的贪心,具体见解题报告。
#2422 1985 的升级版,现将本题形象化,就是一组并排矩形包含的最大矩形面积,用两个栈,来回扫一遍即可。
#2433 如果 N <= 3 无法达到,否则,修的高速公路肯定是 1..i 和 i-1..n,这样,只需恰当选取 i 令 i-1..i 这段路最短即为最优。
#2488 排序之后贪心,假设前 i-1 根都断了,那么剩下重量取决于第 i 根,并且,加入剩下的 n-i 根,那么当前的承重为 A[i]*(n-i),扫描一遍求出这个最大值即可。
#2511 很水很直白,直接加起来,然后贪心取最大就行了。
#2536 背包,先将现有的砝码全部背包一次,然后每增加一个砝码,就取最小的不符值作为新的砝码加入再背包,所有砝码加完之后剩下的不符值就是结果。不过这样做很慢的,也是刚刚够时间和内存。
#2581 找出一条欧几里德图的最短周游回路,满足:先只往右走到最右点,再走回最左点,要覆盖所有点,求最短回路长度。具体贪心方法见程序注释。
#2585 回文距离,简单的统计各个字母出现次数,统计差别数的绝对值求和即可。
#2592 把从头累加的数组 FD[] 和从尾累加的数组 BK[] 求出,并且求出某个位置往前 FD[] 的最小值,往后 BK[] 的最大值,然后枚举 j 判别即可,详见程序注释。
#2642 堆栈贪心法,给一个数组 A[N],对于区间 i, j 之间,函数 f(i, j) = SUM(A[i..j]) * MIN(A[i..j]),求 MAX(f(i, j)), 0 <= i <= j < N。首先,对数组求和预处理,于是可以 O(1) 得到区间的求和。然后,用堆栈贪心法:求出第 i 个元素左边第一个比它小的下标 L[i],和右边第一个逼它大的下标 R[i]。预处理 O(N),现在可以求出最小值是 A[i] 时的最宽区间即为 L[i]+1..R[i]-1,然后枚举 i,求最大的 A[i] * SUM(A[L[i]+1..R[i]-1]),O(N) 可以处理完毕。
#2656 要从某个站开始直到结束,油量保持为正即可。可以用堆栈做到线性的处理,具体解释见程序注释。
#2658 可以证明,假设所有 A~Z 的字母统计数序列为 C[k],对 C[k] 排序,两个序列是 YES 的充要条件是已排序 C[k] 和 C'[k] 完全相同。
#2670 构造一个贪心算法的反例,其实不难想出,看程序注释有一种构造方法。
#2688 很巧妙的一道最优化题,大概可以列入贪心的范畴。题目要求一个 5 维空间的 Manhattan 距离 N 点最远点对距离,可以用 O(2 ^ 5 * N) 的方法解决。详见解题报告。
#2878 明显,找到最大的铺号 max,最小的铺号 min,Michael 将车停在这区间内任一个地方,最少刚好走 2*(max-min) 的距离。
#2883 明显全部要买,并且折扣的个数有且仅有 N/3 个,于是先排序,然后贪心从大往小取,每次取 3 个。
#2921 股票买卖:经典的贪心,先记录所有档案,然后从尾到头遍历;遍历之前创建一个优先队列,存放当天之后剩余的价格 p 和剩余可卖出数为优先级的所有档案。每遍历一天,加入当天价格和可卖出数到优先队列,然后将当天买入的股票卖完:一直从优先队列中取档案,先取出来的肯定 是最贵的,一直卖,直到队列为空或者当天买入的股票已经卖完。
#2956 把各个坐标重叠的厚度累加一下,最后取最大值即可。
#2975 福娃,奥运专栏,对每种福娃算一次,枚举两行,如果两行有 k 个公共的,结果加 C(k,2),复杂度 O(n^3) 还可以加位运算优化。
#3019 就是求两个集合交集元素个数,即已序序列的 LCS,先排序,然后 STL 交集就好了。
#3116 经典贪心,先按分值大的优先,然后按尽可能大的事间来分配。
#3143 贪心,生成一个序列,后一个各位乘积等于前一个数,直接分解前一个,注意要从 9 到 2 分解,然后串接起来就得到下一个。
#3197 给出若干个线段,求把整个 [0,N] 的区间覆盖需要最少多少条线段。比较特殊的贪心方法,先对所有区间排序。然后,顺序枚举,记录到当前区间左界止最少的次数 K,初始化 K 为 1。和 K-1 次时能到达最右位置 A,以及新一段往后接能到最右的位置 B。对于当前枚举到的线段,如果左界 > A+1,那么 A = B,并 K++。然后用其右区间更新到 B。
#3212 矩阵构造,使得恰好有 K 个内部单元的值等于其四周的值之和。随便找 K 个内部单元格,将其本身及四周的单元格都涂成 0,其他的全涂成 1 即可。

你可能感兴趣的:(ZOJ贪心算法_题目)