题目传送门

题意:一块木板按照某个顺序切成a[1], a[2]...a[n]的长度,每次切都会加上该两段木板的长度,问选择什么顺序切能使得累加和最小

分析:网上说这是哈夫曼树。很容易想到先切掉最长的,反过来也就是相当于每次取最短的两块合并成一块,直到最后剩下原来的一块,优先队列实现

代码:

/************************************************
* Author :Running_Time
* Created Time :2015/9/14 星期一 08:51:15
* File Name :POJ_3253.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 2e4 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[N]; int main(void) {
int n;
while (scanf ("%d", &n) == 1) {
for (int i=1; i<=n; ++i) scanf ("%d", &a[i]);
priority_queue<int, vector<int>, greater<int> > Q;
for (int i=1; i<=n; ++i) Q.push (a[i]);
ll ans = 0;
while (Q.size () > 1) {
int l1 = Q.top (); Q.pop ();
int l2 = Q.top (); Q.pop ();
ans += l1 + l2;
Q.push (l1 + l2);
}
printf ("%I64d\n", ans);
} return 0;
}

  

最新文章

  1. NV显卡Ubuntu14.04更新软件导致登录死循环,不过可以进入tty模式
  2. tomcat manager配置
  3. C#面向对象编程进阶(一) ——实现栈
  4. css默认样式
  5. declare 关键字在Oracle中的应用。
  6. jquery技巧总结
  7. HDU 3518 Boring counting(后缀数组,字符处理)
  8. 实现LoadRunner多个场景的顺序执行
  9. 认识HTML5
  10. atomikos的Jta配置
  11. 震荡信号Simulink仿真
  12. JQuery树形目录插件Dynatree
  13. C语言博客作业—结构体
  14. Python 3 re模块3个括号相关的语法
  15. 001-zookeeper 简介-paxos算法,zk简介,特点
  16. 记一个神奇的Bug
  17. 调用Bytom Chrome插件钱包开发Dapp
  18. 关于WebService
  19. error2019-01-17 宏STDOUT_FILENO
  20. python 正则表达式 group() groups()

热门文章

  1. setUp() and setUpBeforeClass()
  2. ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
  3. mysql----其他小技巧
  4. Axios 请求配置参数详解
  5. MySQL数据库设计常犯的错以及对性能的影响
  6. sql 简单查询修改
  7. Oracle:热备时,突然断电情况处理
  8. codeforces 691C C. Exponential notation(科学计数法)
  9. CoreGpaphics
  10. writing-mode属性