using namespace std;
unsigned int n, a[1001], b[1001], v = 0;
int qs(int l, int r) {
long long i = l, j = r, mid = a[(l + r) / 2];
do {
while (a[i] < mid) i++;
while (a[j] > mid) j--;
if (i <= j) {
swap(a[i], a[j]);
i++, j--;
}
} while (i <= j);
if (i < r) qs(i, r);
if (l < j) qs(l, j);
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
qs(1, n);
b[1] = a[1] + a[2];
v += b[1];
int i = 3, j = 1, k = 1;
for (int c = 1; c <= n - 2; c++) {
unsigned int _min = 1<<31, p = 0;
if ((a[i] + a[i + 1]) < _min && (i + 1) <= n) {_min = (a[i] + a[i + 1]); p = 1;}
if ((a[i] + b[j]) < _min && i <= n && j <= k) {_min = (a[i] + b[j]); p = 2;}
if ((b[j] + b[j + 1]) < _min && (j + 1) <= k) {_min = (b[j] + b[j + 1]); p = 3;}
b[++k] = _min;
v += _min;
if (p == 1) {
i += 2;
} else if (p == 2) {
i++;
j++;
} else if (p == 3) {
j += 2;
}
}
cout << v << endl;
return 0;
}
请大牛们帮忙看看