ACwing 282 石子合併(區間dp

2021-10-03 06:54:08 字數 583 閱讀 7478

給出n堆石子,每次只能合併相鄰的兩堆石子,代價為兩堆石子的質量和,求合併所有石子的最小代價。

區間dp中i,j表示的是兩個區間的左右端點,操作物件是區間。

dp[i][j]表示合併第i堆石子到第j堆石子的最小代價。

對於i,j圍成的區間,以合併的分割線區分不同合併方式,相當於在i,j中插入一塊隔板,dp[i][j]取不同隔板位置進行合併代價的最小值。

本質上就是列舉區間的左右兩個端,但是由於在乙個區間中加入隔板,分成的兩個子區間長度都小於原來的區間,也就是說需要使用到長度小於自身的區間的資料。所以不能直接列舉左右端點,而是列舉長度和左端點,通過長度和左端點算出右端點。

#include

using namespace std;

int s[

305]

,f[305][

305]

;int n;

intmain()

cout<[n];

return0;

}

ACWing 282 石子合併

n nn堆石子排成一排,編號為1 n 1 sim n 1 n。每堆石子的個數由乙個非負整數陣列a aa描述。現在要將這些石子合併為1 11堆,每次可以合併兩堆石子,所消耗的能量是這兩堆石子的總數。問合併為1 11堆為止所消耗的能量的最小值。輸入格式 第一行乙個數n nn表示石子的堆數n nn。第二行...

acwing 282 石子合併(區間dp)

設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...

ACwing 282 石子合併(區間DP)

設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...