#NOI2023F. 合并书本(book)

合并书本(book)

题目描述

小 C 有 nn 本书,每本书都有一个重量,他决定把它们合并成一摞。

每一次合并小 C 可以把一摞书放到另一摞书上面,使得它们合并到一摞。如果小 C 把第 ii 摞书放到第 jj 摞书上面,小 C 需要消耗的体力为ii 摞书的重量加上两摞书的磨损值之和

初始时每本书自成一摞且磨损值均为 00。每当小 C 将两摞书合并后,形成的新的一摞书的磨损值为合并前的两摞书的磨损值的较大值的两倍再加一,重量为合并前的两摞书的重量之和

你的任务是设计出合并的次序方案,使小 C 耗费的体力最少,并输出这个最小的体力耗费值。

输入格式

从文件 book.in 中读入数据。

本题有多组测试数据。

输入的第一行包含一个正整数 tt,表示数据组数。

接下来依次输入每组测试数据,对于每组测试数据:

输入的第一行包含一个正整数 nn,表示有 nn 本书。

输入的第二行包含 nn 歌正整数,第 ii 个数 wiw_i 表示第 ii 本书的重量。

输出格式

输出到文件 book.out 中。

对于每组测试数据输出一行一个整数,表示将 nn 本书合并成一摞需要消耗的最少体力。

1
4
1 1 1 1
6

样例 1 解释

如果小 C 将 44 本书两两合并再将得到的两摞合并成一摞,那么前两次需要消耗的体力值各为 11。第三次将一摞重量为 22 的书放到另一摞上面,两摞书磨损值各为 11,需要消耗的体力为 2+1+1=42 + 1 + 1 = 4

因此如果选择这个方案,小 C 耗费的体力只有 1+1+4=61 + 1 + 4 = 6

可以证明,在上述例子中,66 为最小的体力耗费值。

样例 2

见选手目录下的 book2.inbook2.ans

样例 3

见选手目录下的 book3.inbook3.ans

样例 4

见选手目录下的 book4.inbook4.ans

数据范围

对于所有测试数据保证:1t101 \le t \le 101n1001 \le n \le 1001wi1091 \le w_i \le 10 ^ 9

测试点编号 nn \le 是否有特殊性质
121 \sim 2 77
33 1111
44 1313
565 \sim 6 2222
787 \sim 8 2828
9139 \sim 13 5050
1414 6060
1515 7070
1616 8080
171817 \sim 18 100100
192019 \sim 20

特殊性质:保证 wi=1w_i = 1