动态规划总结

是时候总结一波动态规划了。
对于一般的dp题来说,一般都比较能想出是dp的方向。
但第一步并不好想。
对于我而言,dp较难的是设计状态和转移方程。
总结了一下:
动态转移方程很多都是考虑两种情况,是或者否。
例如:背包就考虑取或者不取。树上染色就考虑染或者不染,而比如NOIP2015子串就考虑那一位取或者不取,当然情况可能会分的更复杂。
一个好的转移方程很大程度上取决于状态设计的巧妙与否。
而设计状态一般的套路有分析数据范围,一般来说dp的总状态数不能超过10的7次方—废话。此外还有什么建立二维【0/1】来方便方程的转移。还有什么降低维度,一般来说现有状态比如i都由i-1转移而来那么就有可能要降低维度,比如完全背包的状态设计。在最开始设计状态或者方程的时候一定不要想着一开始就想到正解,正解一般都是由暴力优化过来的,所以想到最直接的状态然后进行优化状态设计。
此外,在状态转移的时候,还要分析能不能运用优化,比如什么单调队列、斜率优化、四边形优化什么的云云。
更需要注意的是,我在最开始dp的时候只会考虑一次dp出答案,但其实可以用两次dp或者更多次dp来得出答案,例如当转移有些不好表达的时候,可以考虑再设计的一个状态来方便方程的转移,总而言之,dp就是运用状态的设计和之间的转移来间接得到最终答案的过程。
此外,要注意dp边界的取值,可以根据dp方程带具体值来试,也可以直接根据状态定义来设计边界取值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值