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;
}
posted @ 2011-05-22 12:08  KOKO's  阅读(309)  评论(0编辑  收藏  举报