贪心题解

8469特殊密码锁 如下分析:

  1. 对于一个密码锁,最多只会按下一次,因为按两次的结果和不按该位置的结果是一样的。
  2. 从左往右处理,如果前面0~i-1位置和目标相同,则考虑i位置:
  • 若i位置和目标不同,则按下i+1就可以
  • 若i位置相同,则不用按,直接到下一位i+1
    (意思就是如果前0~i-1把锁已经处理好,则第i+1把锁按下与否就确定了
  1. 对于第一把锁需要单独讨论,因为它没有前驱锁,所以第一把锁可以按下,也可以不按下(第一把的按下与不按下会触发不同的分支),比较这两种方法产生的结果,取最优解。
链接
2469电池寿命 考虑3个电池:
只用考虑寿命最长的电池和剩余电池总时间的比较:
  1. 若最长的电池比剩余电量之和要小,则最终用电时间等于总电量之和/2(所有的电量都会用完,具体分配情况是:由于a+b轮流消耗c直到c用完且a和b剩余电量相等,这样a和b剩下的也能够刚好用完)
  2. 若最长的电池比剩余电量之和要大,则最终用电时间等于剩余电池电量之和。(a+b
若电池数>3则将最长那个电池提出来,剩下的分成任意两组(这两组可以看成两个电池),根据上述讨论,依然有:
1.若最长的>剩余之和,结果等于剩余之和 。
2.若最长的小于剩余之和,则剩余的可以把最长的消耗光,然后通过某种特殊的消耗组合,使得在剩下的里面依然有这种关系,最终可以消耗完,结果等于全体总和/2 .
若电池数==2,也有这种最长和剩余的关系。
链接
2704寻找平面上的极大点 直接用暴搜O(n^2)会超时,需要优化一些。首先按照x从小到大排序,对于相同的x,y按照从小到大排序。 然后在排好序的数组中从右往左遍历(这样保证了右边会有x大于该点),记录右边y的最大值,如果该点的y大于y的最大值,则该点就是极大点。
19装箱问题 6*6的箱子放入边长为1,2,3,4,5,6的正方形。思路当然是优先处理放入大的箱子,具体处理过程如下。
【贪心题解】对于边长为4,5,6的,一个箱子只能放一个正方形,然后尽量将小的正方形(如果这时还有小的正方形)放进去。
对于边长为3的,要分别考虑4种情况:一个箱子里有1,2,3,4个3 * 3的正方形,再讨论放入对应能容纳的更小的正方形(优先放2 * 2,再放1 * 1)
如果这之后还有22和11,就先全部放入2 * 2,剩下的再放1 * 1.
链接

    推荐阅读