DP的力量不是无穷的。
但是,因为它叫做“动态规划”,它在OI界如鱼得水。这个“动态”不是指“离线”与“在线”,也不是什么“可持久化”。它只是把问题抽象为一个个“阶段”,在每一个“阶段”中作出或繁或简的“决策”,并以此实现“状态”与“状态”间的“转移”。
正如紫书所言,动态规划的理论性和实践性都很强,一方面需要理解“状态”、"状态转移"、“最优子结构”、“重叠子问题”等概念,另一方面又需要根据题目的条件灵活设计算法。
“根据题目的条件灵活设计算法”,可以说
希望是本无所谓有,无所谓无的。这正如地上的路;其实地上本没有路,走的人多了,也便成了路。
——鲁迅
也可以说,对动态规划的掌握情况在很大程度上能直接影响一个选手的分析与建模能力。
分析与建模,是一种十分重要的能力。刘汝佳说,难题无外乎分三种:
- 难想的
- 难做的
- 难调的
分析与建模,便在很大程度上是关于“思考”。所以伟大的Scanf说,你写出了转移方程,就可以了。
但真的是“可以”了吗?我的答案是否定的。
因为其实,想、做、调三者应该是一体的。(在此时Scanf让我们提意见,ZJC说进新机房,臣附议)
DP优化就是一个典例。因为出题人的缘故(满满的仇恨感),每一次决策的时间必须压缩,或是要简化状态本身。空间就是一个极大的牺牲品。DP本身即建立在“MLE”与“TLE”的夹缝之中,所以每一次优化总是让人伤透脑筋。只要一点没有想清楚,想要“做出来”便很难,“调出来”往往更难。
所以,DP之伊始即是“分析与建模”。对于这类问题,Scanf总是说:“我们的同学是有思路的~只是实现能力没有起来~”
其实,任何代码在开始前思路便能很清楚,甚至精确到行,那么实现往往不是大问题。然而“我们的同学”(包括我)更多时候只是“有思路”,且不说“思路”正确与否,即使正确也很难一步到位。
SCOI 2017 酱油记
April 9, 2017
省选终于考完了啊。。
Day1:
先用10分钟浏览了一遍题
看了看t1,感觉贪心好像是对的啊,写了个堆搞一搞
再看t2,最近点似乎可以用点分,再加个树剖维护第一个未签到点,于是码码码,码完3.5h了
一看t3,卧槽计算几何啊。。写了发暴力。然后想到一个n^2sqrt的kd树做法,后来没调出来
最后230
Day2:
又先用10分钟浏览了一遍题
t1切了
t2是两道题加起来的,都可以O(n),然而我都只会nlog,于是T了40
t3写了一个能过大样例的n^2log暴力,但最后只得了10分。。orz
最后170
总分400,似乎挺靠前的
仔细看看上面这段,MCFX同学的总结,你并不能看出他有任何的“特异功能”,遇到题目很多时候也会卡壳。但是他会深入的思考,会分析,会实践。
再次反观我,我很多时候太急了,没有掌握好节奏,没有真正想清楚,效率就总是很低。
当然,也不能一刀切,常常在码题的时候,灵光一闪,没准就创造了一种新算法。
动态规划是一种用途很广的问题求解方法,它本身并不是一个特定的算法,而是一种思想,一种手段。动态规划的核心是状态和状态转移方程。遇见原问题,就把它分解为相对简单的子问题。
最优子结构性质,子问题重叠性质,无后效性。
从递推开始,再到背包,LIS,LCS。
之后是区间DP。
终于树形DP来了。(DAG的拓扑性质)
不厚道的就来了:
FLOYD,(结合图论)
数位DP,(数的统计)
状压DP,(结合二进制)
概率DP,期望DP,(结合数学)
既然可以结合数学,那为什么不结合数据结构啊?或者不结合数据结构,直接简化?
- 倍增优化
- 单调队列优化
- 斜率优化
- 四边形不等式优化
- ......
但是,还有,插头、轮廓线……DP是人总结出来的,是永无止境的。