動態規劃思想:石子合併問題

 

描述:
在一個圓形操場的四周擺放着n 堆石子。現要將石子有次序地合併成一堆。
規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記爲該次合併的得分。
試設計一個算法,計算出將n堆石子合併成一堆的最小得分和最大得分。
算法

貪心算法不能獲得最優解,惋惜了。
首先咱們能夠把這麼堆石子當作一列設計

若是N-1次合併的全局最優解包含了每一次合併的子問題的最優解,那麼經這樣的N-1次合併後的得分總和必然是最優的。
所以咱們須要經過動態規劃算法來求出最優解。di

 

在此咱們假設有n堆石子,一字排開,合併相鄰兩堆的石子,每合併兩堆石子獲得一個分數,最終合併後總分數最少的。動態規劃

咱們設m(i,j)定義爲第i堆石子到第j堆石子合併後的最少總分數。a(i)爲第i堆石子得石子數量。
當合並的石子堆爲1堆時,很明顯m(i,i)的分數爲0;
當合並的石子堆爲2堆時,m(i,i+1)的分數爲a(i)+a(i+1);
當合並的石子堆爲3堆時,m(i,i+2)的分數爲MIN((m(i,i)+m(i+1,i+2)+sum(i,i+2)),(m(i,i+1)+m(i+2,i+2)+sum(i,i+2));
當合並的石子堆爲4堆時......co

相關文章
相關標籤/搜索