标签:acm algorithm 算法 codeforces 递归
Appleman and Toastman play a game. Initially Appleman gives one group of n numbers to the Toastman, then they start to complete the following tasks:
After guys complete all the tasks they look at the score value. What is the maximum possible value of score they can get?
The first line contains a single integer n (1?≤?n?≤?3·105). The second line contains n integers a1, a2, ..., an (1?≤?ai?≤?106) — the initial group that is given to Toastman.
Print a single integer — the largest possible score.
3 3 1 5
26
1 10
10
Consider the following situation in the first example. Initially Toastman gets group [3, 1, 5] and adds 9 to the score, then he give the group to Appleman. Appleman splits group [3, 1, 5] into two groups: [3, 5] and [1]. Both of them should be given to Toastman. When Toastman receives group [1], he adds 1 to score and gives the group to Appleman (he will throw it out). When Toastman receives group [3, 5], he adds 8 to the score and gives the group to Appleman. Appleman splits [3, 5] in the only possible way: [5] and [3]. Then he gives both groups to Toastman. When Toastman receives [5], he adds 5 to the score and gives the group to Appleman (he will throws it out). When Toastman receives [3], he adds 3 to the score and gives the group to Appleman (he will throws it out). Finally Toastman have added 9 + 1 + 8 + 5 + 3 = 26 to the score. This is the optimal sequence of actions.
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
long long a[300005];
int main()
{
int n;
long long ans;
while(scanf("%d",&n)!=EOF)
{
ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
a[i]+=a[i-1];
}
ans=a[n];
for(int i=0;i<=n-2;i++)
{
ans+=(a[n]-a[i]);
}
cout<<ans<<endl;
}
}Codeforces Round #263 (Div. 2) proC
标签:acm algorithm 算法 codeforces 递归
原文地址:http://blog.csdn.net/notdeep__acm/article/details/38858993