求教:直线排列的石子合并问题
问题描述:
在操场上沿一直线排列着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆石子合并成新的一堆,并将新的一堆石子数计为该次合并的得分,允许在第一次合并前对调一次相邻两堆石子的次序。
编程任务:
计算在上述条件下,将n堆石子合并成一堆的最小累计得分、最大累积积分和初次交换的位置。
数据输入:
输入数据由文件名为INPUT2.*的文本文件提供。
其中,第1行是石子的堆数n≤100;
第2行是顺序排列的各堆石子数(≤20),每两个数之间用空格分隔。
?
结果输出:
在屏幕上输出合并的最小得分和初次交换的位置(k,k+1)。如果没有进行对调,则初次交换的位置输出为(0,1)。
每个计算结果占2行,第1行为输出数据的十进制位数,第2行是相应的输出数据。
输入示例
INPUT.IN
3
2 5 1
输出文件示例
最小得分=11
交换的位置:(1,2)或(2,3)
[解决办法]
http://topic.csdn.net/u/20071223/19/6e19a3f8-90f2-46b8-9830-62f7501c9c9b.html