首页 > 代码库 > UESTC 1599 wtmsb
UESTC 1599 wtmsb
这天,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; }
UESTC 1599 wtmsb
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。