谁要的数据结构作业?

谁要的数据结构作业?

举神和ww经常在一起玩关于石子的游戏,今天他们又发明了一种新的玩法,每次他们两个可以把两堆石子合并得到一堆更重的石子,但需要消耗与这两堆石子相同重量的体力。 比如:举神和ww把重量为3和5的石子堆合并,可以得到一个重量为8的石子堆,但同时需要消耗3+5的体力值。 现在他两想把n堆石子合并到只剩下一堆,但他们又不想消耗太多体力,你能帮他们求出消耗的最少体力吗? 数据范围:n<=20000

Input

第一行为一个整数n,表示开始时石子的总堆数 ,接下来n行,每行一个整数a[i] (1<=a[i]<=50000) 代表开始时每堆石子的重量。

Output

输出包含一个整数,表示他们消耗的最小体力。

Sample Input

3
8
5
8

Sample Output

34

AC代码:优先队列知识戳队列及优先队列及栈简单用法

#include
#include//头文件
using namespace std;
int main()
{
     
    int n,a,h;
    long long sum=0;//不定义成long long 会Wrong Answer
    cin>>n;
    priority_queue<int,vector<int>,greater<int> >p;//从小到大排序
    while(n--)
    {
     
        cin>>a;
        p.push(a);
    }
    while(p.size()>1)
    {
     
        h=p.top();
        p.pop();
        h=h+p.top();
        p.pop();
        p.push(h);
        sum=sum+h;
    }
    cout<<sum<<endl;
    return 0;
}

永远相信美好

你可能感兴趣的:(天梯赛校赛题,队列,c++)