动态规划 - 买卖股票的最佳时机 IV
題目鏈接
使用兩個輔助數(shù)組
 buy[i][j]buy[i][j]buy[i][j]表示前iii個股票發(fā)生jjj次交易且手上有一只股票的最大收益。
 sell[i][j]sell[i][j]sell[i][j]表示前iii個股票發(fā)生jjj次交易且手上沒有股票的最大收益。
狀態(tài)轉(zhuǎn)移為:
 buy[i][j]=max(buy[i?1][j],sell[i?1][j]?price[i])buy[i][j]=max\big(buy[i?1][j],sell[i?1][j]?price[i]\big)buy[i][j]=max(buy[i?1][j],sell[i?1][j]?price[i])
 sell[i][j]=max(sell[i?1][j],buy[i?1][j?1]+price[i])sell[i][j]=max\big(sell[i?1][j],buy[i?1][j-1]+price[i]\big)sell[i][j]=max(sell[i?1][j],buy[i?1][j?1]+price[i])
對狀態(tài)狀態(tài)轉(zhuǎn)移進行優(yōu)化:
 buy[j]=max(buy[j],sell[j]?price[i])buy[j]=max\big(buy[j],sell[j]?price[i]\big)buy[j]=max(buy[j],sell[j]?price[i])
 sell[j]=max(sell[j],buy[j?1]+price[i])sell[j]=max\big(sell[j],buy[j-1]+price[i]\big)sell[j]=max(sell[j],buy[j?1]+price[i])
這里存在一個問題,當更新sell[j]sell[j]sell[j]時,用到了buy[j?1]buy[j-1]buy[j?1]的值。
 但是buy[j?1]buy[j-1]buy[j?1]已經(jīng)更新為buy[j?1]=max(buy[j?1],sell[j?1]?price[i])buy[j-1]=max\big(buy[j-1],sell[j-1]?price[i]\big)buy[j?1]=max(buy[j?1],sell[j?1]?price[i])
 那么此時的sell[j]=max(sell[j],buy[j?1]+price[i],sell[j?1])sell[j]=max\big(sell[j],buy[j-1]+price[i],sell[j-1]\big)sell[j]=max(sell[j],buy[j?1]+price[i],sell[j?1]),比正確的多了sell[j?1]sell[j-1]sell[j?1]不過并不影響結(jié)果,所以可以使用一維數(shù)組優(yōu)化。
總結(jié)
以上是生活随笔為你收集整理的动态规划 - 买卖股票的最佳时机 IV的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 贪心 - 分发糖果
 - 下一篇: 贪心 - 按要求补齐数组