問題描述
在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。
輸入格式
輸入第一行包含乙個整數n,表示石子的堆數。
接下來一行,包含n個整數,按順序給出每堆石子的大小 。
輸出格式
輸出乙個整數,表示合併的最小花費。
樣例輸入
51 2 3 4 5
樣例輸出
33資料規模和約定
1<=n<=1000, 每堆石子至少1顆,最多10000顆。
題解
#include#includeview code#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;
}
藍橋杯 演算法提高 合併石子 (dp)
演算法提高 合併石子 時間限制 2.0s 記憶體限制 256.0mb 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n,表示石子的堆數。接下來一...
試題 演算法提高 合併石子
時間限制 2.0s 記憶體限制 256.0mb 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n,表示石子的堆數。接下來一行,包含n個整數,按順...
dp演算法 石子合併問題
這兩天看了一下這個問題,原題是這樣的 有n堆石子,現要將石子有序的合併成一堆,規定如下 每次只能移動相鄰的2堆石子合併,合併花費為新合成的一堆石子的數量。求將這n堆石子合併成一堆的總花費最小 或最大 這個題目在第一次剛看的時候,一臉懵逼,題目看懂了,但是怎麼去求花費怎麼都沒有想明白,後來在網上看了一...