贪心题目大赏
上接:DAY 1
贪心题目大赏
一、前言
线性复杂度,N<=10^5 n√n可以,N<=10^6,nlogn可以
找规律,找贪心规律,找反例验证
贪心一般问最优,抽象成函数最优解
此时会陷入局部最优
二、贪心的数学背景
什么部分背包啊,删数问题啊,一般都是贪心
把题目抽象成函数,每次都往最优走
DP,贪心,搜索:解决问题最优化 ,看数据范围区分
数据小(贪心??)
DFS算算方案总数,指数级一般为搜索
有的题目想了贪心3种还有反例,别贪心了。。
积累题量!!!
![](https://img2018.cnblogs.com/blog/1606003/201907/1606003-20190713203322363-782387142.png)
r
sum =( Σ a[i] )mod M
i=l
直觉:区间和可以转化成前缀和的差
先考虑不取模:
![](https://img2018.cnblogs.com/blog/1606003/201907/1606003-20190714073831016-1820362200.png)
贪心策略:打表求阶乘,然后对于n,从大到小,阶乘能减去的就减去,否则跳过,考虑下一个阶乘
为什么这样可以呢?
本质和二进制转换是一样的
二进制转化本来是用的短除法对吧
然后你考虑对于一个n,如果当前遇到一个2^k,最大的,如果你不减去他,那么后面的数加起来也没他大
这里呢就相当于把原来的二进制转化为阶乘进制辣
贪心策略:
- 可以把最大的数提到前面,那就往前提
- 不能。那就次之
思路,把前K个数最大的放到前面
(以上是由于看错题,看成和了)
答案是个序列,求的是序列
原序列是 1 2 3 4 5 6
如果交换两个数字可以得到更优答案,那就交换
假设已经排好序了,现在交换相临两个
3,4,交换,前面不影响,前缀S,后边也不影响
如果交换的话,上边的式子小于下边的式子
答案只和2,,4,相有关
一旦这样就交换
所以说就是按照每个大臣左右手数字乘积从小到大排序
、
思索样例怎么来的呢?
1,2先过,1送回手电筒,5,10一起过,2送回手电筒,1,2一起过
ans = 2+1+10+2+2 = 17
最慢两个人一定一起过河
过河时间升序排列:A,B,C,D
考虑把最慢的两个人一起送过河
两个人过河牵扯四个人,因为走两次
两种方案:
1.A无脑来回跑
AD A AC A AB
Ans=D+A+C+A+B
2.AB一起作战送
AB A CD B AB
Ans=B+A+D+B+B
然后化成子问题,每次送完,减少2个人
最后剩4个人或3个人
处理4个人按上面做
处理3个人,A来回送人显然是最快的,时间一定是A+B+C
搜索树
0~n最优到次优
贪心是K=0这么走
K允许在某些分支上走次优解
K=1允许走一次1的边