第一章:思维的体操
1.贪心
2.代数分析
3.根据具体题目、情况的特殊性,寻找突破口,例如蚂蚁问题。
第二章:问题求解,常见策略:
1.枚举优化:
(1)枚举部分,计算另外一部分;需要枚举量之间存在部分关系!
(2)求解数值较大的时候,有时会需要用到二分枚举的方法。
2.建模能力的培养:
需要养成将实际问题数字化!模型化的能力,将实际问题改为相关的可求解数据。
3.数学问题:
寻找问题的特殊性质, 细心+耐心+观察。
4.问题的预处理。
5.深搜广搜的结合使用。
第三章:高效算法设计举例:
1.计数排序。约束条件,每一个数字不能过大,不能超过可开数组的范围。
2.枚举的同时,做部分处理,因为每次对于Aj的比较,只需要知道其前j-1个数中的最大值即可,其余的比较都是浪费的。
例18:开放式学分制,是维护前j个数中的最大值max,可以减少一重循环,有效降低复杂度。(O(n))
3.流星那个题目:
预处理:预处理将每颗流星的坐标和速度,改为在相机中出现的时间,生成一个数组。
建模
求得区间之后,任务即变成:求得一个时间t,使得这个时间的流星最多。
扫描每次移动到区间的左右端点的再左边一点点。
再一次使用到前面提到的信息:维护信息而不是重新计算。(因为每次都是累加的!)
4.求连续和的问题:
给定一个数组A,维护一个前i个数字的和的数组B。
利用B数组来进行优化。
比如例21:子序列的题目。