3002 石子歸併 3

2021-09-07 13:09:34 字數 1265 閱讀 5089

時間限制: 1 s

空間限制: 256000 kb

題目等級 : 鑽石 diamond

題解檢視執行結果

description

有n堆石子排成一列,每堆石子有乙個重量w[i], 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w[i]+w[i+1]。問安排怎樣的合併順序,能夠使得總合併代價達到最小。

輸入描述 

input description

第一行乙個整數n(n<=3000)

第二行n個整數w1,w2...wn  (wi <= 3000)

輸出描述 

output description

乙個整數表示最小合併代價

樣例輸入 

sample input

4 1 1 4

樣例輸出 

sample output

資料範圍及提示 

data size & hint

資料範圍相比「石子歸併」 擴大了

分類標籤 tags 點此展開 

動態規劃

區間型dp

單調性dp

列舉長度+四邊形不等式優化

1 #include2 #include3 #include4 #include5 #include6

#define lli long long int

7using

namespace

std;

8const

int maxn=5001;9

const

int maxn=0x7fffffff;10

void read(int &n)

1114

while(c>='

0'&&c<='9'

)15 x=(x<<1)+(x<<3)+c-48,c=getchar();

16 flag==1?n=-x:n=x;17}

18int

n;19

inta[maxn];

20int

sum[maxn];

21int

dp[maxn][maxn];

22int

mid[maxn][maxn];

23int

main()

2445}46

}47}48

49 printf("

%d",dp[1

][n]);

50return0;

51 }

codevs3002 石子歸併3

3002石子歸併3題目描述description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述input description 第一行乙個整數n n 30...

codevs3002 石子歸併3

題目描述description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述input description 第一行乙個整數n n 3000 第二行n個整...

1048 石子歸併

題目描述 description 有n堆石子排成一列,每堆石子有乙個重量w i 每次合併可以合併相鄰的兩堆石子,一次合併的代價為兩堆石子的重量和w i w i 1 問安排怎樣的合併順序,能夠使得總合併代價達到最小。輸入描述 input description 第一行乙個整數n n 100 第二行n個...