POJ

来源:互联网 发布:恐怖黎明物品数据官网 编辑:程序博客网 时间:2024/06/06 16:37

链接上一篇博文,这个是任意两个木棍拼接的题目
这个题是经典的最优二叉树(百科连接:https://baike.baidu.com/item/%E5%93%88%E5%A4%AB%E6%9B%BC%E6%A0%91/2305769?fr=aladdin&fromid=1792010&fromtitle=%E6%9C%80%E4%BC%98%E4%BA%8C%E5%8F%89%E6%A0%91)问题

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cctype>#include<string>#include<queue>#include<set>#include<map>#include<math.h>#include<string>using namespace std;const int INF = 1000000000;const int maxn = 20000 + 5;int n;int a[maxn];priority_queue<unsigned long long, vector<unsigned long long>, greater<unsigned long long> > qu;void init(){    while(!qu.empty()) qu.pop();    int x;    for(int i = 0; i < n; ++i)    {        scanf("%d", &x);        qu.push(x);    }}unsigned long long solve(){    unsigned long long sum = 0;    while(!qu.empty())    {        unsigned long long a = qu.top(); qu.pop();        if(qu.empty()) break;        unsigned long long b = qu.top(); qu.pop();        //cout << a <<" " << b << endl;        unsigned long long c = a + b;        sum += c;        qu.push(c);    }    return sum;}int main(){    scanf("%d", &n);    init();    unsigned long long ans = solve();    printf("%lld", ans);    return 0;}
原创粉丝点击