您的位置:首页 > 产品设计 > UI/UE

UESTC 1599 wtmsb

2017-07-10 20:21 330 查看
这天,AutSky_JadeK看到了n张图片,他忍不住说道:“我TM社保!”。



每张图片有一个社保值,他可以合并两张图片,合并所得的图片的社保值是原来两张图片的社保值之和。

每次合并需要消耗的体力也是原来两张图片的社保值之和。 显然,n−1次合并之后,只剩下一张图片。

他想知道,在这个过程中,他消耗的总体力最少是多少。

Input

第一行包含一个整数n,

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

Output

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

Sample input and output

Sample Input Sample Output

3

1 2 9

15

Hint

1≤n≤200001≤n≤20000,

1≤Ai≤20001≤Ai≤2000

解题思路 优先队列

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
priority_queue<ll,vector<ll>,greater<ll> >q;
ll n,x,a,b;
ll ans=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
q.push(x);
}
while(q.size()>=2)
{
a=q.top();
q.pop();
b=q.top();
q.pop();
a=a+b;
ans+=a;
q.push(a);
}
cout<<ans<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: