石子合併 鏈式

2022-08-22 17:54:16 字數 723 閱讀 5634

問題描述

設有n堆沙子排成一排,其編號為1,2,3,…,n(n<=100)。每堆沙子有一定的數量。現要將n堆沙子並成為一堆。歸併的過程只能每次將相鄰的兩堆沙子堆成一堆,這樣經過n-1次歸併後成為一堆。找出一種合理的歸併方法,使總的代價最小。

【輸入格式】

輸入由若干行組成,第一行有乙個整數,n(1≤n≤100);表示沙子堆數。第二行是乙個整數m是每堆沙子的數量。 

【輸出格式】

乙個整數,歸併的最小代價。

【輸入樣例】

713 7 8 16 21 4 18

【輸出樣例】

階段:以歸併石子的長度為階段,一共有n-1個階段。

狀態:每個階段有多少堆石子要歸併,當歸並長度為2時,有n-1個狀態;

當歸並長度為3時,有n-2個狀態;

當歸並長度為n時,有1個狀態。

決策:當歸並長度為2時,有1個決策;當歸並長度為3時,有2個決策;

當歸並長度為n時,有n-1個決策。

狀態轉移方程:f[i][i]=0 ;f[i][j]=min     0

#include #include int n,f[101][101],sum[101][101],a[101];

int main()

for(int len=2;len<=n;len++)

} }printf("%d/n",f[1][n]);

return 0;

}

石子合併問題

在乙個圓形操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。分析 假設有n堆石子需要合併,可以設計乙個2 n 1個元素的陣列來儲存每堆石子的個數。...

石子合併問題

在乙個圓形操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。沒有用dp 感覺一般的也能寫,時間複雜度也不高。include include inc...

石子合併問題

石子合併問題是最經典的dp問題。首先它有如下3種題型 1 有n堆石子,現要將石子有序的合併成一堆,規定如下 每次只能移動任意的2堆石子合併,合併花費為新合成的一堆石子的數量。求將這n堆石子合併成一堆的總花費最小 或最大 分析 當然這種情況是最簡單的情況,合併的是任意兩堆,直接貪心即可,每次選擇最小的...