刷题——Fence Repair POJ

来源:互联网 发布:广东省软件企业评估 编辑:程序博客网 时间:2024/06/08 05:51

/*
先排序,每次加最小两块板的大小,并把最小两块板的大小加入队列
*/

#include <stdio.h>

#include <queue>
using namespace std;
#define ll long long
priority_queue<ll,vector<ll>,greater<ll> >que;
int main(){
    int n;
    while(~scanf("%d",&n)){
        ll a;
        while(!que.empty())que.pop();
        for(int i=0;i<n;i++){
            scanf("%I64d",&a);
            que.push(a);
        }
        if(que.size()==1){
            printf("%d\n",0);
            que.pop();
        }
        else{
            int sum=0;
            while(true){
                ll x=que.top();
                que.pop();
                ll y=que.top();
                que.pop();
                sum+=x+y;
                if(que.empty())break;
                que.push(x+y);
            }
            printf("%I64d\n",sum);
        }
    }
    return 0;
}
原创粉丝点击