贪心:
求最优解,按照某种最优策略,将复杂问题分解成层层最优子问题,并由子问题的最优解回溯,
需要明确两个:
该问题是否适合用于贪心策略
如何选择贪心标准
下面几个为本周让我印象深刻的几个题目
Codeforces Round 374 (Div 2)D
题意为:n个数,我们可以做k次操作,每次选定一个数,+x或-x,在这种条件下,让你求出怎么操作,可以使得乘积最小。
解题思路:首先我们要确定正负值,如果负数个数为奇数,我们只需要使得所有数符号不变的条件下,绝对值尽可能大(从绝对值较小者开始递增)如果负数个数为偶数,我们要先使得一个绝对值最小的数变号(非负->负 或 负->非负)那么最终我们就可以求得答案了。
HDU5635 BestCoder Round 74 (div2)A
题意为:给你一个字符串,其完全由小写字母组成,其长度为n我们知道任意两个相邻后缀的最长公共前缀,让你求出这个字符串可能的方案数。
题解思路:我们假设读到的a[i]与a[i+1]的最长前缀的数组为b那么b肯定是呈现如此的数组x,x-1,x-2,...,2,1,0,0,...,0,0,y,y-1,y-2,...,2,1,0,...,1or0(最后一定是1或0)我们只要检测是否b是这样的数列即可。
题目“Canada Cup 2016 D. Contest Balloons
题意为:给你n 个队伍,你的队伍是第一个队伍,每个队伍有气球数量,和最大数量。如果气球数量多于最大数量,你就会飞走,无法进行排名!你现在可以给你别的队伍气球,使得他们飞走,从而使你的排名尽量靠前!问你的最好名次?
题解思路:你给气球肯定要给气球比你多的人的队伍,让他们飞走后,可能你的名次会下降,但为了更好的名次,你必须在给比你靠前的人的气球,这样给一次 更新一次名次最大值即可。所有我们可以用优先队列的方式来模拟这一个过程注意的是给一次气球更新最大名次,否则可能得不到最优解,因为这一次你能给,但是不应该给,给了就再也无法翻身了。 所以这也同样完成给与不给的选择。