pku 3253 - Fence Repair

来源:互联网 发布:金钥匙注音软件 编辑:程序博客网 时间:2024/05/29 04:51

題目:有很多籬笆,每次把兩個籬笆合起來,代價使他們的長度,求所有籬笆合起來的最小代價。

分析:貪心,哈弗曼樹。直接利用優先隊列求解哈弗曼樹即可。

說明:數學和算法被鄙視了╮(╯▽╰)╭。

#include <algorithm>#include <iostream>#include <cstdlib>#include <cstdio>#include <queue>using namespace std;int main(){int n, leaf, small1, small2;while (~scanf("%d",&n)) {priority_queue<int,vector<int>,greater<int> > Q;for (int i = 0; i < n; ++ i) {scanf("%d",&leaf);Q.push(leaf);}long long sum = 0LL;if (Q.size() == 1) {sum = Q.top();}else {while (Q.size() > 1) {small1 = Q.top();Q.pop();small2 = Q.top();Q.pop();Q.push(small1+small2);sum = sum + small1+small2;}}printf("%lld\n",sum);}return 0;}


0 0
原创粉丝点击