之前我已经发布了前缀和和差分、前缀和和后缀和的例题两篇博客,说实话那个时候前缀和我也没有真正弄懂,知识感觉这种算法很好用
那现在我们就把做前缀和做后缀的思想本质和变化投影讲清楚
一.前缀后缀和
1.前缀后缀和:s[i]=a[1]+...a[i],a[i]+...a[j]=s[j]-s[i-1]
2.疑似前缀后缀和:root p1710题解
二.前缀极值和后缀极值
1.例谈算法
2010NOIP导弹拦截 这道题就是按照相对第一个系统的距离平方排序并前缀极值,剩下的对于第二个系统后缀极值
2.这样的题目还有很多,但还有一些题目很难直接一眼瞪出来
3.那么问题就是如何剖析这种算法在题目中的千变万化呢
首先这种问题没有办法使用简单贪心进行单调决策,一定是多个维度的参数互相制衡的,这样的题目就必须在几个维度上进行枚举决策
而这种题目的一种就是前缀/后缀极值,这样的题目一般简化玩之后就是,在一个题目的两个方面,有一些要选择一方面,而另一些要选择另一方面,不能两面同时具有,并且决策是连续的,那么就可以使用前后缀极值
三.前后缀思想
1.实际上就相当于做了一个打表操作,对于数据打表,后面在需要决策时不需要再计算,直接查询调用,节省时间
2.但这样也有许多好处,能把一个复杂的决策变成是和否的决策,并枚举是否决策变化的边界
update:前后缀实际上最重要的两点
1.一是需要从题目中抽象出相互制衡最终达到平衡最优的过程,比如说发现某一道题目中,这个集合如何划分成多个集合,那么寻找在哪儿划分就是度量制衡好坏的指标
2.如何用最快速算出划分后两遍的最优值以达到将所有的最优去最优的目的?
我们一般采用初始化方式,也就是由于在输入已经确定的情况下,关于其所有信息线性渴求(当然包括题目要求被制衡的那个维度),在初始化完成之后,寻找用来分割集合的下标,所有下标枚举之后去最值就可以