10954
每次都把当前排好序下的前2个数的和加入ans,前两个数算过后,变为一个数,把它插入到后面已排好序的序列里即可
//============================================================================
// Name : 10954.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
long long ans, t;
int n;
long long a[5010];
int main() {
while(scanf("%d", &n)&&n){
ans = 0;
for(int i = 0;i < n;i++){
scanf("%lld", &a[i]);
}
sort(a, a+n);
for(int i = 1;i < n;i++){
a[i] += a[i-1];
ans += a[i];
//printf("ans : %lld\n", ans);
for(int j = i+1; j < n;j++){
if(a[j] < a[j-1]){
swap(a[j], a[j-1]);
}
}
}
printf("%lld\n", ans);
}
return 0;
}

浙公网安备 33010602011771号