首页 > 代码库 > UESTC - 1599

UESTC - 1599

这天,AutSky_JadeKAutSky_JadeK看到了nn张图片,他忍不住说道:“我TMTM社保!”。 
技术分享
每张图片有一个社保值,他可以合并两张图片,合并所得的图片的社保值是原来两张图片的社保值之和。 
每次合并需要消耗的体力也是原来两张图片的社保值之和。 
显然,n?1n?1次合并之后,只剩下一张图片。 
他想知道,在这个过程中,他消耗的总体力最少是多少。

Input

第一行包含一个整数nn, 
第二行包含nn个整数A1,A2,,AnA1,A2,…,An,代表nn张图片的社保值。

Output

输出一行,包含一个整数,代表他消耗的总体力最少是多少。

Sample Input

3
1 2 9

Sample Output

15

Hint

1n200001≤n≤20000, 
1Ai2000

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <queue>
 4 using namespace std;
 5 typedef long long LL;
 6 const int MAXN = 2e4 + 8;
 7 
 8 priority_queue<LL, vector<LL>, greater<LL>> pq;
 9 
10 int main()
11 {
12     #ifdef LOCAL
13     freopen("j.txt", "r", stdin);
14     int T = 4;
15     while(T--){
16     #endif
17     int n, a, i, b;
18     LL ans = 0;
19     scanf("%d", &n);
20     for(i = 0; i < n; i++){
21         scanf("%d", &a);
22         pq.push(a);
23     }
24     int sz = pq.size();
25     while(sz >= 2){
26         a = pq.top();
27         pq.pop();
28         b = pq.top();
29         pq.pop();
30         a = a + b;
31         ans += a;
32         pq.push(a);
33         sz--;
34     }
35 
36     cout << ans << endl;
37 
38     #ifdef LOCAL
39     cout << endl;
40     }
41     #endif
42     return 0;
43 }

 

UESTC - 1599