文章

11

粉丝

318

获赞

6

访问

100.9k

头像
用优先队列(小根堆),每次选择最小的两堆合成一堆再放入队列中
P1544 中南大学机试题
发布于2020年4月16日 08:12
阅读数 10.2k

#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;///小根堆,权值小的先出队
int main()
{
    int n,v,ans=0;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&v);
        q.push(v);
    }
    while(q.size()>1)
    {
        int a=q.top();q.pop();
        int b=q.top();q.pop();
        q.push(a+b);
        ans+=a+b;
    }
    printf("%d\n",ans);
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发