hoj2677 Instruction Set // poj3253Fence Repair 哈夫曼树

/*

哈弗曼编码,比如权值为 a:1 b:1 c:2 d:3 e:5 f:6 的树

   1.开始时由最小的两个数 a:1 b:1组成一棵树

   2.接着由新的最小的两个数 2 c:2 d:3 e:5 f:6 中的 2 c:2组成新的树

   3.接着由最小的两个数 4 d:3 组成新的树

   4.接着由最小的两个数 e:5 f:6 组成一棵树

   5.接着由最小的两个数 7 11 组成一棵树(最终形成)

   6.算最小的编码总长:= 18 + 7 + 11 + 4 + 2 = 42

 

   2        4           7        11          18

   / \       / \       / \       /  \         /  \

  a   b    2   c     4   d   e    f       7   11

           / \         / \                   / \  / \

          a   b      2  c                 4  d  e  f

                    / \                    / \

                   a   b                 2   c

                                         / \

                                        a   b

 

可以用优先队列做,优先队列每次插入都是插入到排完序后的队列数组中(可能不是很准确),

当还没开始建树时,把出现的次数进队,当开始建树时,每次调用头两个数据a和b,然后把两个数据

相加后,再次进队,同时优先队列会进行排序,并且每次ans += a+b,最终答案即为ans

*/

 

#include <iostream>

#include <string>

#include <queue>

#include <vector>

using namespace std;

string s;

int main()

{

   freopen("sum.in","r",stdin);

   freopen("sum.out","w",stdout);

   int n,command;

   while(cin>>n)

   {

      priority_queue<int ,vector<int>,greater<int> > q; //注意,此处> >是有空格的

      int worst = 0,ans = 0;

      for(int i=0;i<n;i++)

      {

         cin>>s>>command;

         worst+=command*s.size();    //最坏情况需要的空间

         q.push(command);            //把数据进队

      }

      int a,b;

      if(q.size()==1)                //当之有一个串时

         ans = q.top();

      while(true)

      {

         a = q.top();

         q.pop();

         if(q.empty())   //只剩下一个根节点,就已经构成了一棵树

            break;

         b = q.top();

         q.pop();

         ans+=a+b;   //答案

         q.push(a+b); //把新生成的树的权值进队

      }

      cout<<worst<<" "<<ans<<endl;

   }

   return 0;

}

 

poj3253Fence Repair

#include <iostream>

#include <queue>

#include <vector>

using namespace std;

int main()

{

   freopen("sum.in","r",stdin);

   freopen("sum.out","w",stdout);

   int n,t,a,b;

   while(cin>>n)

   {

      long long ans = 0;    //要为long long型才不会WA

      priority_queue<int ,vector<int>,greater<int> > q;

      for(int i=0;i<n;i++)

      {

         cin>>t;

         q.push(t);

      }

      if(q.size()==1)

         ans = q.top();

      while(q.size()>1)

      {

         a = q.top();

         q.pop();

         b = q.top();

         q.pop();

         ans += a+b;

         q.push(a+b);

      }

      cout<<ans<<endl;

   }

   return 0;

}

 

 

转载于:https://www.cnblogs.com/yejinru/archive/2012/03/21/2410367.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java数组的实现_Java数组HashCode实现

这很奇怪。一位同事询问了java中myArray.hashCode()的实现。我以为我知道&#xff0c;但是后来我进行了一些测试。检查下面的代码。我注意到的奇怪想法是&#xff0c;当我编写第一个系统时&#xff0c;结果是不同的。请注意&#xff0c;这几乎就像报告内存地址并修改类一样&…

LeetCode 624. 数组列表中的最大距离

文章目录1. 题目2. 解题2.1 暴力超时2.2 优化1. 题目 给定 m 个数组&#xff0c;每个数组都已经按照升序排好序了。 现在你需要从两个不同的数组中选择两个整数&#xff08;每个数组选一个&#xff09;并且计算它们的距离。 两个整数 a 和 b 之间的距离定义为它们差的绝对值 |…

strcpy()函数一个简单那程序来了解一下它。。

View Code #include <stdio.h>#include <string.h>int main() { char a[5] "ABCD"; char b[8] "abcdefg"; char c[8] "abcdefg"; char d[5] "ABCD";strcpy(a,b); //长的复制给短的strcpy(c,d);//短的复制给长的print…

java怎么调用7zip进行压缩_JAVA使用7-zip解压缩带密码的Zip文件(非Proccess方法)...

首先到sourceforge网站下载sevenzipjbinding压缩包我下载的版本是sevenzipjbinding-4.65-1.04-rc-extr-only-AllWindows.zippublicvoidunzipDirWithPassword( final String sourceZipFile ,final String destinationDir , final String password ){RandomAccessFile randomAcce…

LeetCode 156. 上下翻转二叉树(DFS)*

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;其中所有的右节点要么是具有兄弟节点&#xff08;拥有相同父节点的左节点&#xff09;的叶节点&#xff0c;要么为空 将此二叉树上下翻转并将它变成一棵树&#xff0c; 原来的右节点将转换成左叶节点。返回新的根。 …

httpd 分页_更改 Apache httpd.conf 配置文件

提示&#xff1a;如果在虚拟主机商配置&#xff0c;请直接配置第三、四步&#xff0c;因为支持 .htaccess 的空间已经配置好了前面两步。用编辑器打开 Apache 配置文件 httpd.conf(该文件位于 Apache 安装目录Apache2conf)&#xff0c;并按如下步骤修改&#xff0c;。一、加载了…

C#23种设计模式WebCast讲解笔记大全(25讲)

C#面向对象设计模式第一讲&#xff1a;面向对象设计模式与原则 C#面向对象设计模式第二讲&#xff1a;Singleton Pattern单件模式&#xff08;创建型模式&#xff09; C#面向对象设计模式第三讲&#xff1a;Abstract Factory Pattern 抽象工厂模式&#xff08;创建型模式&#…

textlayout Java_Java TextLayout.getBounds方法代码示例

import java.awt.font.TextLayout; //导入方法依赖的package包/类/*** {inheritDoc}*/Overridepublic void paintComponent(Graphics g) {updateSizes();Graphics2D g2d (Graphics2D) g;chatDisplay.removeOldMessages();Dimension size getSize();if (freeColClient.isMapEd…

LeetCode 311. 稀疏矩阵的乘法

文章目录1. 题目2. 解题2.1 暴力求解2.2 选取都不为0的行和列相乘1. 题目 给你两个 稀疏矩阵 A 和 B&#xff0c;请你返回 AB 的结果。 你可以默认 A 的列数等于 B 的行数。 请仔细阅读下面的示例。 示例&#xff1a; 输入&#xff1a; A [[ 1, 0, 0],[-1, 0, 3] ] B [[ 7…

jQuery UI应用--滑块Slider

1、 Animate&#xff1a; 类型Boolean 默认值false a) 用处&#xff1a;单击滑动区域时&#xff0c;滑块是否使用动画效果平滑移动到单击位置。 b) 代码示例&#xff1a; 创建实例时设置属性值 $(".class").slider({animate:true}); 实例化后得到…

java部署jar还是war优劣_详解Spring Boot 部署jar和war的区别

本文介绍了Spring Boot 部署jar和war两种方式的区别,分享给大家,具体如下: 1、 packaging的方式不同,一种设置成jar一种是war xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 cn.vcyber.www vcybe…

创业产品经理需要懂技术吗?

作为一位工程师&#xff0c;和一位在不断追求更好产品的设计人员。个人认为&#xff0c;产品经理最好是这样的&#xff1a;一、 精通技术。技术很容易框住人的思想&#xff0c;要不特别精通&#xff0c;能随时跳出技术的束缚&#xff0c;带给产品真正的提升。一般这种产品经理会…

LeetCode 281. 锯齿迭代器(map+vector)

文章目录1. 题目2. 解题1. 题目 给出两个一维的向量&#xff0c;请你实现一个迭代器&#xff0c;交替返回它们中间的元素。 示例: 输入: v1 [1,2] v2 [3,4,5,6] 输出: [1,3,2,4,5,6]解析: 通过连续调用 next 函数直到 hasNext 函数返回 false&#xff0c;next 函数返回值的…

[转载] 杜拉拉升职记——39 充满变数的时期

来源&#xff1a;李可. 杜拉拉升职记(第三版). 西安: 陕西师范大学出版社, 2010, 5. 39 充满变数的时期 何好德和几个销售总监分别谈了话。Tony林事先自然也多少听到些风声&#xff0c;等正式证实了&#xff0c;还是感觉郁闷极了&#xff0c;表面还得装没事人一样&#xff0c;知…

LeetCode 186. 翻转字符串里的单词 II

文章目录1. 题目2. 解题1. 题目 给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例&#xff1a; 输入: ["t","h","e"," ","s","k","y"," ","i","s","…

java自动的废料收集_Java 垃圾收集机制

对象引用Java 中的垃圾回收一般是在 Java 堆中进行&#xff0c;因为堆中几乎存放了 Java 中所有的对象实例。谈到 Java 堆中的垃圾回收&#xff0c;自然要谈到引用。在 JDK1.2 之前&#xff0c;Java 中的引用定义很很纯粹&#xff1a;如果 reference 类型的数据中存储的数值代表…

LeetCode 1198. 找出所有行中最小公共元素(二分/合并有序链表)

文章目录1. 题目2. 解题2.1 按列遍历2.2 二分查找2.3 合并k个有序链表1. 题目 给你一个矩阵 mat&#xff0c;其中每一行的元素都已经按 递增 顺序排好了。 请你帮忙找出在所有这些行中 最小的公共元素。 如果矩阵中没有这样的公共元素&#xff0c;就请返回 -1。 示例&#x…

Java参数传递笔记

java值传递与引用传递 1、对象是按引用传递的---带""号的赋值操作 2、Java 应用程序有且仅有的一种参数传递机制&#xff0c;即按值传递---由"函数调用"引起的 3、按值传递意味着当将一个参数传递给一个函数时&#xff0c;函数接收的是原始值的一个副本 4、…

java 分布式系统 面试_分布式系统的面试题9

1、面试题分布式服务接口请求的顺序性如何保证&#xff1f;2、面试官心里分析其实分布式系统接口的调用顺序&#xff0c;也是个问题&#xff0c;一般来说是不用保证顺序的。但是有的时候可能确实是需要严格的顺序保证。给大家举个例子&#xff0c;你服务A调用服务B&#xff0c;…

Windows phone 应用开发[14]-调用WebBrowser

很久没有更新博客了.最近一直陷身在项目中难以有时间抽身梳理总结.关于博客确实很多想写的主题.节前大概草草 的梳理一下大概就有十几个主题.只能趁着放假的时间来逐渐把这批文章力所能及系统的更新出来. 主要涉及到我们团队现在Windows phone 项目开发中实际碰到一些问题和对应…