• 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;
    }
  • 相关阅读:
    Mybatis Plus3.4.0打印SQL至控制台
    234 saltstack安装配置与使用
    CentOS7.9二进制方式安装mysql5.7
    查锁杀锁
    Oracle搭建DG
    MySQL 恢复
    数据库克隆(克隆的主机只需要安装软件不需要安装实例)
    MySQL单表恢复
    Properties实现文件存储
    大易之磁盘操作
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7147511.html
Copyright © 2020-2023  润新知