原題鏈接: http://oj./problems/best-time-to-buy-and-sell-stock-iii/ global[i][j]=max(local[i][j],global[i-1][j]), 也就是去當(dāng)前局部最好的,和過(guò)往全局最好的中大的那個(gè)(因?yàn)樽詈笠淮谓灰兹绻?dāng)前天一定在局部最好的里面,否則一定在過(guò)往全局最優(yōu)的里面)。對(duì)于局部變量的維護(hù),遞推式是 local[i][j]=max(global[i-1][j-1]+max(diff,0),local[i-1][j]+diff), 也就是看兩個(gè)量,第一個(gè)是全局到i-1天進(jìn)行j-1次交易,然后加上今天的交易,如果今天是賺錢的話(也就是前面只要j-1次交易,最后一次交易取當(dāng)前天),第二個(gè)量則是取local第i-1天j次交易,然后加上今天的差值(這里因?yàn)閘ocal[i-1][j]比如包含第i-1天賣出的交易,所以現(xiàn)在變成第i天賣出,并不會(huì)增加交易次數(shù),而且這里無(wú)論diff是不是大于0都一定要加上,因?yàn)榉駝t就不滿足local[i][j]必須在最后一天賣出的條件了)。
可以看到,這里的模型是比較復(fù)雜的,主要是在遞推式中,local和global是交替求解的。不過(guò)理清思路之后,代碼是非常簡(jiǎn)練的,不禁感嘆算法真是牛逼哈,這么個(gè)復(fù)雜生活問(wèn)題幾行代碼就解決了。
來(lái)源:
csdn 作者:Code_Ganker
|
|
來(lái)自: Tornador > 《學(xué)術(shù)相關(guān)》