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; }