石子合併題解1

2021-10-07 11:14:32 字數 629 閱讀 5888

分析:

首先我們可以發現這跟以往的線性dp不同,從每一步的點到點成了兩條線的轉移,所以在與以往的思考上有很大不同,首先若i,j兩堆可以合併那麼i~j之間的所有石子都以合併,即i,j合併與i至k,和k+1至i有關。

狀態:dp[i][j]表示左端點為i,右端點為j的區間合併花費最小值。

狀態轉移方程:

dp[r][j] = min(dp[r][j], dp[r][k] + dp[k + 1][j]) + r~j石子合併花費

實現:首先乙個迴圈列舉長度,在乙個列舉右端點,左端點 = 長度 + 右端點 - 1,最後一重迴圈列舉k斷點在哪。

**

#include #include #include #include using namespace std;

int n, a[1000005], dp[105][105], qianzhui[100005];

int main()

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

dp[j][you] += qianzhui[you] - qianzhui[j - 1];

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

return 0;

}

題解 石子合併

有n nn堆石子排成一條直線,每堆石子有一定的重量。現在要合併這些石子成為一堆石子,但是每次只能合併相鄰的兩堆。每次合併需要消耗一定的體力,該體力為所合併的兩堆石子的重量之和。問最少需要多少體力才能將n堆石子合併成一堆石子?假設只有2堆石子,顯然只有1種合併方案。不管怎麼合併,總之最後總會歸結為2堆...

題解 石子合併

區間dp模板題 題目鏈結 題目要求乙個環中的最小價值和最大價值 如題 首先,我們段環成鏈,即開兩倍的空間,i與i n對應。用字首和預處理出任意區間中的和。接下來,我們列舉段環的位置。設dp i j 是i到j合併的最小價值。顯然我們可以列舉k作為段環的點,方程即為 dp i j min dp i j ...

SDOI2008 石子合併 題解

題面 garsiawachs演算法專門解決石子合併問題 設乙個序列是a 0.n 1 每次尋找最小的乙個滿足a k 1 a k 1 的k,那麼我們就把a k 與a k 1 合併,並向前尋找乙個第乙個超過他們的和的數,把這個數插入到他後面 include define inc i,a,b for reg...