Description
有N根木棒,现在要把N根木棒还原为一根并且每次只能将两根进行连接,所花费的时间是两根木棒的长度和,只有相邻的两根木棒可以连接,要求还原为一根木棒且总时间最短。
Input
输入数据由一个整数N打头( 1 <= N <= 100 ),表示N根木棒,接下来一行由N个数构成,中间用空格隔开,O1O2…ON( 1 <= Oi <= 100 )表示每根木棒的长度。
Output
输出一行正整数,表示还原为一根木棒的最短时间。
Sample Input
3 8 5 8
Sample Output
34
Source
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
int main() {
int n, tmp, result = 0;
vector<int>num;
cin >> n;
for (int i = 0; i < n; i++) {
scanf("%d", &tmp);
num.push_back(tmp);
}
while (num.size() != 1) {
int min = 201, n = 0;
for (int i = 0; i < num.size()-1; i++) {
tmp = num[i] + num[i + 1];
if (tmp < min)min = tmp, n = i;
}
result += min;
num[n] = min;
num.erase(num.begin() + n + 1);
}
cout << result;
return 0;
}