标签: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