STL练习题4

Problem D: STL-D

Time Limit: 2 Sec   Memory Limit: 128 MB
Submit: 53   Solved: 17

Description

美旸旸最近拿到了去年蓝桥杯的奖金,他开始膨胀了,于是他买了一个50斤的西瓜,决定和全班同学分享,
为了某种不可描述的原因,他决定把西瓜的重量切得不一样,这个西瓜将被分成n块,第i块的大小为a[i],在切西瓜时,
美美旸会消耗体力,在切一块重量为x的西瓜时,他会消耗x的体力,例如他把重量为3的西瓜分成两块,则会消耗3点
体力,美美旸知道最后n块的西瓜重量,但是由于他微积分只考了99分,他不知道怎样切才能使得体力花费最小,聪明
的你能帮帮他吗?

Input

多组组数据
每组数据第一行一个数n,表示西瓜一共被切成n块
第二行n个数,表示n块西瓜的重量

Output

每组数据输出一个数,代表美美旸的最小体力花费
解答
#include <iostream>
#include<queue>
using namespace std;
priority_queue<long long  ,vector<long long >,greater<long long > >melon;
int main()
{   int N;
    while(cin>>N)
    {   long long sum=0;
        if(N==0) break;
        while(!melon.empty())
        {
            melon.pop();
        }
        for(int i=0;i<N;i++)
        {
            long long x;
            cin>>x;
            melon.push(x);
        }
        while(melon.size()>1)
        {
            long long  a=melon.top();
            melon.pop();
           long long b=melon.top();
            melon.pop();
            sum+=a+b;
            melon.push(a+b);
        }
        cout<<sum<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42702110/article/details/81056757