一:前言
本周学习了线性动态规划算法,看了博客。
相比于以前的知识,切切实实感觉到了难度,在看别人博客的时候,代码看不懂,需要画图才能理解。重点是这个动态规划既要考虑,当前状态,又要考虑过去状态,各阶段状态之间的关系不好找。感觉dp难就难在转移。
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
? ● ? ● ??〈 /
() へ | \〈
>? ?_ ィ │ //
/ へ / ?<| \\
ヽ_? (_/ │//
7 |/
>―r ̄ ̄`?―_
二:学习总结:
较大数字溢出:
1:指数取对数,质数取模取余
DP题目总结(每天一小点)_fighting_yifeng的博客-CSDN博客_dp题目
动态规划--线性dp - 随笔分类 - _雨 - 博客园 (cnblogs.com)
动态规划---线性dp - 随笔分类 - wyboooo - 博客园 (cnblogs.com)
看完这些博客,明白了线性规划基本原理,就是一定要保证状态无后效性,即:某阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响,状态、阶段和决策是构成DP算法的三要素,而子问题重叠性、无后效性和最优子结构性质是问题能用DP求解的三个基本条件。
我自己以前在解题的过程中,发现把问题分成若干阶段进行,确定一阶段达到最优时,再去做下一阶段,但发现当下一阶段达到最优时,会影响已经完成的阶段,从而最终都只有一个阶段是最优的。比如快递放在货架上,给一批快递,含有N个订单,M种货物,让把所有货物放在一个长条形架子上,一种货物只能放一个格子,问怎样放置取快递该批快递所有订单取快递所消耗的路程最短,我最初想的是贪心算法,按订单安排,把每个订单都放到最优,结果发现,把第一个订单放好,再放第二个订单,如果第一个订单和第二个订单含有同种货物,就可能会把第一个订单已经排好的最优解打乱,也就是说这种方法状态有后效性。
首先要保证状态无后效性,否则一定是不对的。其次是状态转移方程可以正推,也可以逆推。
对于dp转移过程中如果遇见了求和,试着发现求和式子的规律,设计函数(并且该函数可以在dp过程中累积),从而降低转移的复杂度。
感觉线性dp很多水题,很多题目思路相同。