hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)
Safe Or Unsafe
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1332 Accepted Submission(s): 524
12
helloworld
66
ithinkyoucandoit
yes
#include <iostream>
using namespace std;
#define MAXNODE 10010
struct HTNode{
char data; //节点值
double weight; //权重
int parent; //双亲节点
int lchild; //左孩子节点
int rchild; //右孩子节点
}ht[*MAXNODE-];
struct HCode{
char cd[MAXNODE];
int start;
}hcd[MAXNODE];
char str[MAXNODE];
void CreateHT(HTNode ht[],int n)
{
int i,j,k,lnode,rnode;
double min1,min2;
for(i=;i<*n-;i++) //所有节点的相关域置初值-1
ht[i].parent = ht[i].lchild = ht[i].rchild = -;
for(i=n;i<*n-;i++){ //构造哈夫曼树
min1 = min2 = ; //lnode和rnode为权重最小的两个节点位置
lnode = rnode =-;
for(k=;k<=i-;k++)
if(ht[k].parent == -){
if(ht[k].weight<min1){
min2 = min1;rnode = lnode;
min1 = ht[k].weight;lnode = k;
}
else if(ht[k].weight<min2){
min2 = ht[k].weight;rnode = k;
}
}
ht[i].weight = ht[lnode].weight + ht[rnode].weight;
ht[i].lchild = lnode;ht[i].rchild = rnode; //ht[i]作为双亲节点
ht[lnode].parent = i;ht[rnode].parent = i;
}
}
void CreateHCode(HTNode ht[],HCode hcd[],int n)
{
int i,f,c;
HCode hc;
for(i=;i<n;i++){ //根据哈夫曼树求哈夫曼编码
hc.start = n;c=i;
f = ht[i].parent;
while(f!=-){
if(ht[f].lchild == c)
hc.cd[hc.start--] = '';
else
hc.cd[hc.start--] = '';
c = f;f=ht[f].parent;
}
hc.start++;
hcd[i]=hc;
}
}
int main()
{
int n;
cin>>n;
while(n--){
int m;
cin>>m;
cin>>str;
int len = ;
for(int i=;str[i];i++){ //初始化ht[]哈夫曼树的叶子节点和权值
//ht[]有无存储str[i]
int j;
for(j=;j<len;j++)
if(str[i]==ht[j].data)
break;
if(j<len) continue; //已经存储了,退出本次循环
int count = ;
for(j=;str[j];j++){ //没存储,给ht[len]计数
if(str[i]==str[j])
count++;
}
ht[len].data = str[i];
ht[len++].weight = count;
}
//len--;
CreateHT(ht,len); //创建哈夫曼树
CreateHCode(ht,hcd,len); //根据哈夫曼树求哈夫曼编码
if(len==){ //只有一种字符的情况下,哈夫曼树是构造不起来的,特殊处理(直接进行比较)
if(ht[].weight<=m)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
continue;
}
int wpl = ;
for(int i=;i<len;i++){
wpl += (len-hcd[i].start+)*ht[i].weight;
}
//cout<<wpl<<endl;
if(wpl<=m)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)的更多相关文章
- Safe Or Unsafe--hdu2527(哈夫曼树求WPL)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2527 用优先队列模拟 #include<iostream> #include<std ...
- HDU 5884 Sort (二分+k叉哈夫曼树)
题意:n 个有序序列的归并排序.每次可以选择不超过 k 个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过T, 问 k最小是多少. 析:首先二分一下这个 k .然后在给定 k 的情况下, ...
- 数据结构-哈夫曼树(python实现)
好,前面我们介绍了一般二叉树.完全二叉树.满二叉树,这篇文章呢,我们要介绍的是哈夫曼树. 哈夫曼树也叫最优二叉树,与哈夫曼树相关的概念还有哈夫曼编码,这两者其实是相同的.哈夫曼编码是哈夫曼在1952年 ...
- C#数据结构-赫夫曼树
什么是赫夫曼树? 赫夫曼树(Huffman Tree)是指给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小.哈夫曼树(也称为最优二叉树)是带权路径长度最短的树,权值较大的结点 ...
- hdu 2527 Safe Or Unsafe (哈夫曼树)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2527 Safe Or Unsafe (优先队列实现Huffman)
Safe Or UnsafeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu 5884 Sort 队列+多叉哈夫曼树
Sort Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Des ...
- HDU 5884 Sort ——(K叉哈夫曼树)
这题真心比较奥义,先见这个人的博客:http://blog.csdn.net/libin66/article/details/52565484 补0的方法是使得其满足成为满K叉树,而其博客中所说的“所 ...
- Android版数据结构与算法(七):赫夫曼树
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 近期忙着新版本的开发,此外正在回顾C语言,大部分时间没放在数据结构与算法的整理上,所以更新有点慢了,不过既然写了就肯定尽力将这部分完全整理好分享出 ...
随机推荐
- OE context 传参数
来自:http://shine-it.net/index.php/topic,16360.0.html 有个需求想many2one字段关联显示的value在各个模块显示不同的值. 如果直接该rel_n ...
- 带有关闭按钮的alertView
概述 由于讨厌系统自带的alertView只能通过点击按钮才能关闭.你说万一按钮区域都是功能性的操作呢(这可不是我胡思乱想哦,要怪就产品的想法吧,呵呵哒),所以我们还是应该备有一个带有“X”(关闭按钮 ...
- jquery切换class
<ul class="nva_sele_txt" id=""> <a href="#" class= ...
- HTML5学习笔记 音频
HTML5提供了播放音频的标准. Web上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件比如flash来播放的.然而,并非所有的浏览器都拥有同样的插件. hmt ...
- Linux命令-目录处理命令:mv
注意:在linux下面,剪切文件和改名是同一个命令mv,而不是两个独立的命令. mv /tmp/beijing/chaoyangqu /root 移动chaoyangqu目录到root目录下面 mv ...
- Oracle XE安装具体解释
一.原数据库的卸载 数据库的卸载就不多说了,讲一下过程: 1.运行Oracle Uninstall,卸载Oracle产品 2.删除regedit下的全部Oracle相关 ...
- springboot 整合 rabbitmq
http://blog.720ui.com/2017/springboot_06_mq_rabbitmq/
- Spring Cloud 模块简介2
前面一篇文章谈到微服务基础框架,而Netflix的多个开源组件一起正好可以提供完整的分布式微服务基础架构环境,而对于Spring Cloud正是对Netflix的多个开源组件进一步的封装而成,同时又实 ...
- Openresty支持HTTP2
1. 下载openresty-1.13.6.1.tar.gz和openssl-1.0.2l.tar.gz,并解压 下载对应的软件版本,创建openresty_http2安装路径 2. 安装openre ...
- atitit. java跟php的比较..为什么大企业喜欢java 而不是php
atitit. java跟php的比较..为什么大企业喜欢java 而不是php 1. 主要原因::php是"低技术.低价格.低素质人员使用"的三低武器 1 2. 三低武器的特点( ...