演算法提高 合併石子(DP)

2022-03-05 10:43:04 字數 687 閱讀 8867

問題描述

在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。

輸入格式

輸入第一行包含乙個整數n,表示石子的堆數。

接下來一行,包含n個整數,按順序給出每堆石子的大小 。

輸出格式

輸出乙個整數,表示合併的最小花費。

樣例輸入

51 2 3 4 5

樣例輸出

33資料規模和約定

1<=n<=1000, 每堆石子至少1顆,最多10000顆。

題解

#include#include

#define inif 0x3f3f3f3f

intn;

int dp[1001][1001] = ;

int sum[1001][1001

];int num[1001

];void

minsz()

}for(j = 2; j <= n; j++)

dp[i][j] =minx;}}

printf(

"%d\n

", dp[1

][n]);

}int

main()

minsz();

return0;

}

view code

藍橋杯 演算法提高 合併石子 (dp)

演算法提高 合併石子 時間限制 2.0s 記憶體限制 256.0mb 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n,表示石子的堆數。接下來一...

試題 演算法提高 合併石子

時間限制 2.0s 記憶體限制 256.0mb 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n,表示石子的堆數。接下來一行,包含n個整數,按順...

dp演算法 石子合併問題

這兩天看了一下這個問題,原題是這樣的 有n堆石子,現要將石子有序的合併成一堆,規定如下 每次只能移動相鄰的2堆石子合併,合併花費為新合成的一堆石子的數量。求將這n堆石子合併成一堆的總花費最小 或最大 這個題目在第一次剛看的時候,一臉懵逼,題目看懂了,但是怎麼去求花費怎麼都沒有想明白,後來在網上看了一...