zoukankan
html css js c++ java
priority_queue POJ 3253 Fence Repair
#include <iostream> #include <queue> using namespace std; int main(void) { priority_queue<double> q; q.push(66.6); q.push(22.2); q.push(44.4); cout << q.top() << ' '; q.pop(); cout << q.top() << endl; q.pop(); q.push(11.1); q.push(55.5); q.push(33.3); q.pop(); while (!q.empty()) { cout << q.top() << ' '; q.pop(); } cout << endl; return 0; }
http://poj.org/problem?id=3253
1、O(n^2):for+Select()
超时
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; struct Node { long long weight; unsigned int parent; unsigned int lchild; unsigned int rchild; }; Node HT[40005] = {0}; long long Sum(const int &n) { long long sum = 0; for (int i = n + 1; i <= 2 * n - 1; i++) { sum += HT[i].weight; } return sum; } void Select(const int &len, int &a, int &b) { // 在HT[1..len]中选择parent为0且weight最小的两个结点, // 其序号分别为a和b。 for (int i = 1; i <= len; i++) { if (HT[i].parent == 0) { a = i; break; } } for (int i = a + 1; i <= len; i++) { if (HT[i].parent == 0) { b = i; break; } } if (HT[a].weight > HT[b].weight) // 保持a的始终小于b的,有序 swap(a, b); for (int i = max(a, b) + 1; i <= len; i++) { if (HT[i].parent == 0) { if (HT[i].weight > HT[b].weight) continue; else if (HT[i].weight < HT[a].weight) { b = a; a = i; } else b = i; } } if ( !(HT[a].parent == 0 && HT[b].parent == 0) ) { cerr << "Error!" << endl; exit(1); } } void CreatHuffmanTree(const int &n) { // weight存放n个字符的权值(均>0),构造哈夫曼树HT, // 并求出n个字符的哈夫曼编码HC for (int i = 1; i <= n; i++) cin >> HT[i].weight; for (int i = n + 1; i <= 2 * n - 1; i++) { // 在HT[1..i-1]中选择parent为0且weight最小的两个结点, // 其序号分别为s1和s2。 int s1 = 0; int s2 = 0; Select(i - 1, s1, s2); HT[s1].parent = i; HT[s2].parent = i; HT[i].lchild = s1; HT[i].rchild = s2; HT[i].weight = HT[s1].weight + HT[s2].weight; } } int main(void) { // freopen("cin.txt", "r", stdin); int n; cin >> n; if (n <= 1) cout << 0 << endl; else { CreatHuffmanTree(n); cout << Sum(n) << endl; } return 0; }
2、选k个最小值的算法用优先队列
参考:
#include <iostream> #include <queue> using namespace std; typedef long long ll; // 便于移植 int main(void) { priority_queue< ll, vector<ll>, greater<ll> > q; int N; cin >> N; for (int i = 0; i < N; i++) { ll x; cin >> x; q.push(x); } ll cost = 0; for (;;) { ll a = q.top(); q.pop(); if (q.empty()) break; ll b = q.top(); q.pop(); cost += a + b; q.push(a + b); } cout << cost << endl; return 0; }
查看全文
相关阅读:
SpringBoot+mybatis的驼峰命名转换不生效
vue3 ts遇到的问题
阿里巴巴的Java 工程脚手架
Mybatis获取插入值的ID
Bootstrap的Modal与WebUploader联用的问题及办法
Flex布局专题
23种设计模式
排序算法-Java实现快速排序算法
中间件面试专题:kafka高频面试问题
中间件面试专题:RabbitMQ高频面试问题
原文地址:https://www.cnblogs.com/jjtx/p/2533474.html
最新文章
敏捷开发 | DSDM 在非 IT 领域也同样适用?
敏捷落地 | 从“麦克莱恩”看敏捷与创新
你掉进过“伪敏捷”的陷阱吗?
测试过程需不需要践行敏捷?
软件开发流变史:从瀑布开发到敏捷开发再到DevOps
PMI-ACP认证,你了解多少?
大学计算机软件专业在线课程推荐系列——总目录
深入理解计算机系统 csapp datalab 详解
深入理解计算机系统 第一章 计算机系统漫游
[head first 设计模式]第二章 观察者模式
热门文章
[head first 设计模式] 第一章 策略模式
P1066 2^k进制数
卷积神经网络图像纹理合成 Texture Synthesis Using Convolutional Neural Networks
基于Opencv识别,矫正二维码(C++)
Linux内核剖析——操作系统的启动
算法导论第十五章——动态规划
编写antd的Cascader 级联选择组件市级地区数据
SpringBoot Test Junit 联用
Java的两个好用的工具包 Apache commons
Vue 3项目如何设置全局变量
Copyright © 2011-2022 走看看