题目描述
在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.
输入输出格式
输入格式:
数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.
输出格式:
输出共2行,第1行为最小得分,第2行为最大得分.
输入输出样例
输入样例#1: 复制
4 4 5 9 4
输出样例#1: 复制
43 54
算法分析:
笔者看到这道题时首先想到的是贪心,仔细分析后发现题上没说石子根据一定顺序来摆放,易证局部最优解不一定是问题最优解,没有贪心性质,不能用贪心。 然后想到动态规划,打个表。过程如下(以找输入样例4 5 9 4最小得分为例):
1 | 2 | 3 | 4 | |
1 | b[1][1]=0 | |||
2 | b[2][2]=0 | |||
3 | b[3][3]=0 | |||
4 | b[4][4]=0 |