贪心算法的一些简单题目
冲浪
倒序考虑(消除后效性
最后一分钟可以选择的浪花中肯定选最大收益的,以此类推即可。
每分钟加入在当前时间消散的浪花即可。
可用堆优化。
注意开long long
1.最大乘积
通过手推来发现一个贪心策略。
把数字拆的尽量小更好,但是不能够拆出1
多余的拆出的数从最大的往后一个一个加上去。
2.最大乘积2
拆3最优秀
3.最小数
昂?每一次考虑在能去的范围内找到最小的数即可
4.合并果子2
考虑huffman树肯定满枝最优。
那第一次取成3的倍数便是贪心策略
5.线段覆盖
右端点排序,然后从左往右找肯定最优。
可以看作每一次都是选择的最好的位置了。
6.纸牌游戏:考虑从左往右依次计算以及从右往左。
7.邻项交换(微扰)求某个排列问题中考虑交换两个相邻项看哪种更优。比较微扰后的代价和之前的代价哪一个更大。
(1)国王游戏
(2)狂暴的老师+2
8.其他题目
(1)守望者的逃离。
考虑蓄力+闪现更优。
最后几秒钟把走路可以走的时间也算进去取max就行(dp
或者直接数学方法/打表纯贪心
(2)P1123木棍加工
通过排序单调性解决一维如宽度,然后长度直接dp类似最长不下降即可
注意一个定理:不上升子序列个数,与该序列的最长上升子序列长度相等(dilworth定理)。
最长上升子序列:朴素做法:dp(n²)
可以用数据结构优化成nlogn,还可以用贪心:每一次找到当前最长上升子序列中的比当前元素大的最小的(lower_bound)元素替换
本文来自博客园,作者:lei_yu,转载请注明原文链接:https://www.cnblogs.com/lytql/p/15000497.html