1. 问题描述:
设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=100)。每堆沙子有一定的数量。现要将N堆沙子并成为一堆。归并的过程只能每次将相邻的两堆沙子堆成一堆,这样经过N-1次归并后成为一堆。找出一种合理的归并方法,使总的代价最小。
【输入格式】
输入由若干行组成,第一行有一个整数,n(1≤n≤100);表示沙子堆数。第2至m+1行是每堆沙子的数量。
【输出格式】
一个整数,归并的最小代价。
【输入样例】
7
13
7
8
16
21
4
18
【输出样例】
239
2. 解题思路:
首先这也是一个多阶段决策问题,所以考虑采用动态规划来解。
然后研究一下每个决策(合并还是不合并)受哪个或者哪几个因素影响。本题可以看作受两个因素的影响:
(1)要决策的是第 i 堆。
(2)合并的是相邻的一堆。
如果没有(2)的话,我们可以大胆采用d[i]来存储最优值,但因为有了(2&#