經典dp 石子合併

2021-08-03 21:13:37 字數 843 閱讀 3944

設有n堆石子排成一排,其編號為1,2,3,…,n。每堆石子有一定的數量,例如: 13 7 8 16 21 4 18 現要將n堆石子歸併為一堆。歸併的過程為每次只能將相鄰的兩堆石子堆成一堆,這樣經過n-1次歸併之後最後成為一堆。對於上面的7堆石子,可以有多種方法歸併成一堆。其中的2種方法入下圖:

歸併的代價是這樣定義的:將兩堆石子歸併為一堆時,兩堆石子數量的和稱為歸併2堆石子的代價。如上圖中,將13和7歸併為一堆的代價為20。歸併的總代價指的是將沙子全部歸併為一堆沙子的代價的和。如上面的2種歸併方法中, 第1種的總代價為 20+24+25+44+69+87 = 267 第2種的總代價為 15+37+22+28+59+87 = 248 由此可見,不同歸併過程得到的總的歸併代價是不一樣的。 當n堆石子的數量給出後,找出一種合理的歸併方法,使總的歸併代價為最小。

第1行:1個整數n(1<=n<=100),表示石子的數量第

2行:n個用空格分開的整數,每個整數均小於10000,表示各堆石子的數量。

3

13 7 8

43

#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int n=105;

int n;

int dp[n][n], l[n], s[n][n];

int main()

printf( "%d\n", dp[1][n] );

return 0;

}

經典 區間dp 合併石子

題目鏈結 這個動態規劃的思是,要得出合併n堆石子的最優答案可以從小到大列舉所有石子合併的最優情況,例如要合併5堆石子就可以從,最優的2 3和1 4中得到最佳的答案。從兩堆最優到三堆最優一直到n堆最優。狀態轉移方程式 dp i j min dp i k dp k 1 j 複雜度為o n 3 inclu...

區間DP經典 石子合併

題目鏈結 題意 環形的一群石子,每次可以選擇相鄰的兩堆合併,分數為新得到的一堆石子,求將這片石子合併成一堆的最大和最小分數 輸入 第一行乙個正整數n,其後n個數代表每堆石子的個數 分析 第一次寫的時候我想當然的寫的狀態轉移方程是dpx l r max dpx l 1 r a l r dpx l r ...

DP 合併石子

矩陣連乘求最小相乘次數的問題和石子合併的問題思路是一樣的,而二者都是典型的dp 石子合併的問題 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n...