DS实验题 融合软泥怪-1
题目
思路
很容易想到第一种做法,用Huffman算法,从森林中找出两个值最小的节点,合并再加入森林,在这个过程中不断记录。
但是每一次需要sort一遍,将最小的两个值节点置于头两个节点,最坏情况下复杂度是O(n^3)的量级,结果是TLE。
第二种方法是利用STL中的priority_queue模板进行解题,很方便,这里给出AC代码。但是优先队列手写实现还是需要实践,将在下一篇进行实现。
代码
Huffman:
//
// main.cpp
// Huffman Tree2
//
// Created by wasdns on 16/12/24.
// Copyright © 2016年 wasdns. All rights reserved.
//#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;struct Node
{int num;Node *l, *r;
};bool cmp(Node *n1, Node *n2)
{if (n1 -> num != n2 -> num) return n1 -> num < n2 -> num;return false;
}Node *node[100005];/*Ininode:初始化节点*/
void Ininode(int n)
{int i;for (i = 1; i <= n; i++){node[i] = new Node;cin >> node[i] -> num;node[i] -> l = NULL;node[i] -> r = NULL;}
}/*Huffman函数*/
int Huffman(int n)
{int cnt = 0;sort(node+1, node+n+1, cmp);while (1){if (node[2] -> num == 100005) //只剩下一棵树{break;}cnt += node[1] -> num;cnt += node[2] -> num;node[1] -> num = node[1] -> num + node[2] -> num; //1、2合并为1node[2] -> num = 100005; //删除2sort(node+1, node+n+1, cmp); //将值最小的两棵树前移}return cnt;
}int main()
{int n;cin >> n;Ininode(n);int ans = Huffman(n);cout << ans << endl;return 0;
}
STL_Priority_Queue:
//
// main.cpp
// PriorityQueue STL
//
// Created by wasdns on 16/12/24.
// Copyright © 2016年 wasdns. All rights reserved.
//#include <iostream>
#include <functional>
#include <queue>
using namespace std;struct cmp
{bool operator() (int x,int y) {return x > y;}
};int storage[100005];int main()
{int n;cin >> n;//priority_queue<int, vector<int>, greater<int>> q;priority_queue<int, vector<int>, cmp> q;for (int i = 1; i <= n; i++){cin >> storage[i];q.push(storage[i]);}int cnt = 0;while (q.size() > 1){int x = q.top();q.pop();int y = q.top();q.pop();cnt += x+y;q.push(x+y);}cout << cnt << endl;return 0;
}
2016/12/24
DS实验题 融合软泥怪-1相关推荐
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- DS实验题 Inversion
题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...
- DS实验题 击鼓传花
题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wa ...
- DS实验题 Floyd最短路径 Prim最小生成树
题目: 提示: Floyd最短路径算法实现(未测试): // // main.cpp // Alg_Floyd_playgame // // Created by wasdns on 16/11/19 ...
- 小孩的游戏 - 2021数据结构 排序和选择实验题
小孩的游戏 - 2021数据结构 排序和选择实验题 pre 做都做了, 干脆发上来算了 : D 题目分析 算法与数据结构实验题 5.18 小孩的游戏 ★实验任务 一群小孩子在玩游戏,游戏规则是这样子, ...
- 数值分析上机题matlab线性方程组,数值分析上机实验报告 - 线性方程组部分实验题1...
s=A(i,(i+1):n)*x((i+1):n,1); else s=0; end x(i,1)=(b(i)-s)/A(i,i);end %Cholosky分解方法***************** ...
- SSLGET ×××综合实验题
SSL&GET ×××综合实验题 1.网络拓扑 2.网络需求 KS与Inside1.Inside2.DMZ2建立GET ×××,ASA对外提供SSL ×××. 3.具体配置 KS: ip do ...
- 2021年春季学期-信号与系统-第七次作业参考答案-MATLAB实验题
本文是 2021年春季学期-信号与系统-第七次作业参考答案 的小题的参考答案. ▌MATLAB 实验题 ▌ 在网络学堂下载一段音乐及其经过处理后的音乐数据文件,聆听相应的音频效果.使用在MATLAB中 ...
- 2021年春季学期-信号与系统-第四次作业参考答案-MATLAB实验题2
本文是 2021年春季学期-信号与系统-第四次作业参考答案 的内容. ▌MATLAB实验题2 2. 回声的模拟与消除 在山间,或者洞穴中说活,会听到回声,这是声音在相距较远的山壁之间来回反射传播产生的 ...
最新文章
- 获取AD里面指定OU或Container里面的计算机以及Lastlogon时间格式转换
- JS性能--DOM编程之重排与重绘
- C语言进行数据指定步长的区间统计
- 1.封装WinMain至动态链接库
- 如何展示富文本_自助建站如何做出个性化效果?
- 微软宣布新命令行工具 Windows Terminal 和 WSL2
- 够狠 | 单点登录三种方式,够狠!够劲爆!
- 内核同步机制-信号量(semaphore)
- osx10.15.5降级成10.3.3
- 移动端页面兼容性问题解决方案整理(一)
- php yii composer,yii2怎么用composer生成一个应用?
- mysql授权与回收_MySQL 授权,回收权限,查看权限
- Linux群常见问题整理(一)[转]
- L2与L1正则化理解
- 斐讯K2刷华硕固件教程
- java的io流有什么作用_Java IO流详解(一)——简单介绍
- 安卓小游戏:小板弹球
- 分布式计算原理之分布式协调与同步(1)——分布式互斥
- 开房信息被黑客“脱裤”以后…
- 如何申请ATT官方解锁iPhone4