100 #3219. 石子合并(直线版)

石子合并(直线版)

题目描述

在一条直线上摆着 nn 堆石子,第 ii 堆有 aia_i 个。每次只能把相邻的两堆合并成一堆,合并的代价是这两堆石子的总数。经过 n1n-1 次合并后变成一堆。

求把所有石子合并成一堆的最小总代价

输入格式

第一行一个整数 nn

第二行 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n

输出格式

一行一个整数,表示最小总代价。

输入样例 1

4
1 3 5 2

输出样例 1

22

说明

最优方案之一:先合并 1+3(代价 4),再合并 5+2(代价 7),最后合并 4+7(代价 11),总代价 4+7+11=224+7+11=22


贪心反例

石子序列: 9 4 6 1 5

贪心过程

步骤 序列 操作 本次代价 累计
1 [9, 4, 6, 1, 5] 合并 1+5=6(最小相邻和) 6
2 [9, 4, 6, 6] 合并 4+6=10 10 16
3 [9, 10, 6] 合并 10+6=16 16 32
4 [9, 16] 合并 9+16=25 25 57

最优方案(DP)

步骤 序列 操作 本次代价 累计
1 [9, 4, 6, 1, 5] 合并 9+4=13 13
2 [13, 6, 1, 5] 合并 1+5=6 6 19
3 [13, 6, 6] 合并 6+6=12 12 31
4 [13, 12] 合并 13+12=25 25 56

贪心 57 > 最优 56,差距虽小,但足以说明贪心不成立。

数据范围

1n2001 \le n \le 2001ai10001 \le a_i \le 1000