1. 程式人生 > >51Nod--1117 聰明的木匠(排序)

51Nod--1117 聰明的木匠(排序)

我們可以反過來想,如何將這幾個線段組成一根 並且每次花費是組成的兩段的和 

 

#include<bits/stdc++.h>
using namespace std;
#define maxn 50005
#define LL long long
LL  a[maxn],b[maxn],ans=0;
priority_queue<int,vector<int>,greater<int> >q;
int main(){
  LL  n;
  cin>>n;
  for(LL  j=1;j<=n;j++){
     scanf(
"%lld",&a[j]); q.push(a[j]); } LL ans=0; while(q.size()!=1){ int l1=q.top(); q.pop(); int l2=q.top(); q.pop(); ans+=l1+l2; q.push(l1+l2); } cout<<ans<<endl; return 0; }