复盘股票问题
通过leetcode上的几道经典的股票问题,我们由浅入深地认识到动态规划的精妙之处,下面我们来复盘一下股票问题的解题思路,看我们是如何抽丝剥茧,一步一步地逼近正确思路,迎来柳暗花明的。 首先还是老生常谈的问题:遇到动态规划问题,首先思考【状态】和【选择】的问题。 在股票系列问题中,最初拿到题目时不要慌,再复杂的问题都是有套路可循的,若要用动态规划,我们首先要思考其【状态】,再说的通俗一点就是【变量】,看问题中哪些量是变化的,在此题中是“天数” “交易次数” “股票的持有状态”。那么怎样寻找状态转移呢?此时我们要知道所谓【状态转移】是和【选择】形影不离的,做出【选择】后自然迎来【状态变化】,那么在此问题中【选择】就是“买入”或“卖出”股票或者“观望(不买也不卖)” 下面贴上顺藤摸瓜的思路: 顺着这样的思路便可将股票系列问题一网打尽。 下面再贴上股票系列问题(K=2)的代码: class Solution { public : int maxProfit ( vector < int > & prices ) { int n = prices . size ( ) , K = 2 ; if ( n == 0 ) return 0 ; vector < vector < vector < int > > > dp ( n , vector < vector < int > > ( ( K