贪心算法的一些简单题目

冲浪

倒序考虑(消除后效性

最后一分钟可以选择的浪花中肯定选最大收益的,以此类推即可。

每分钟加入在当前时间消散的浪花即可。

可用堆优化。

注意开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)元素替换

posted @ 2021-07-12 08:43  lei_yu  阅读(79)  评论(0编辑  收藏  举报