PTA数据结构与算法题目集(中文) 7-29
PTA数据结构与算法题目集(中文) 7-29
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。
但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。
请编写程序帮助农夫计算将木头锯成N块的最少花费。
输入格式:
输入首先给出正整数N(≤),表示要将木头锯成N块。第二行给出N个正整数(≤),表示每段木块的长度。
输出格式:
输出一个整数,即将木头锯成N块的最少花费。
输入样例:
8
4 5 1 2 1 3 1 1
输出样例:
49
题目分析:一道基础的利用哈夫曼树的题 利用最小堆建哈夫曼树 可以再建哈夫曼树的过程中就计算总共的花费 不需要最后再利用哈夫曼树计算
遇到的问题:首先 建哈夫曼树遇到了问题 无法申请结构体指针数组 只好改用结构体数组 再者 PTA上用gcc编译无法通过 用clang就可以了 而且用的还是c++
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define INIFITY -65535
typedef struct HuffumanNode* Huffman;
struct HuffumanNode
{
int Data;
Huffman Rc;
Huffman Lc;
}; typedef struct HeapStruct* MinHeap;
struct HeapStruct
{
Huffman Elements;
int Size;
int Capacity;
}; void Insert(MinHeap Heap, Huffman huffman)
{
Heap->Size++;
int i;
for (i = Heap->Size; Heap->Elements[i / ].Data > huffman->Data; i = i / )
Heap->Elements[i] = Heap->Elements[i / ];
Heap->Elements[i].Data=huffman->Data;
} Huffman Delete(MinHeap Heap)
{
HuffumanNode Min = Heap->Elements[];
HuffumanNode Tmp = Heap->Elements[Heap->Size--];
int Parent, Child;
for (Parent = ; Parent * <= Heap->Size; Parent = Child)
{
Child = Parent * ;
if (Child != Heap->Size && Heap->Elements[Child].Data > Heap->Elements[Child + ].Data)
Child++;
if (Tmp.Data <= Heap->Elements[Child].Data)break;
else
Heap->Elements[Parent] = Heap->Elements[Child];
}
Heap->Elements[Parent] = Tmp;
return &Min;
} MinHeap BuildHeap(int Capacity)
{
MinHeap Heap = (MinHeap)malloc(sizeof(struct HeapStruct));
Heap->Size = ;
Heap->Capacity = Capacity;
Heap->Elements = (Huffman)malloc(sizeof(struct HuffumanNode) * (Heap->Capacity + ));
Heap->Elements[].Data = INIFITY;
for (int i = ; i <= Capacity; i++)
{
Heap->Elements[i].Lc = NULL;
Heap->Elements[i].Rc = NULL;
}
return Heap;
} MinHeap CreateMinHeap()
{
int N;
scanf("%d", &N);
MinHeap Heap = BuildHeap(N);
for (int i = ; i < N; i++)
{
Huffman huffman = (Huffman)malloc(sizeof(struct HuffumanNode));
huffman->Lc = NULL;
huffman->Rc = NULL;
int num;
scanf("%d", &num);
huffman->Data = num;
Insert(Heap, huffman);
}
return Heap;
} int Total;
void BuildHuffmanTree(MinHeap Heap)
{
int j = Heap->Size;
for (int i = ; i < j; i++)
{
Huffman huffman = (Huffman)malloc(sizeof(struct HuffumanNode));
int a = Delete(Heap)->Data;
int b = Delete(Heap)->Data;
huffman->Data = a + b;
Total += huffman->Data;
Insert(Heap, huffman);
}
} int main()
{
MinHeap Heap = CreateMinHeap();
BuildHuffmanTree(Heap);
printf("%d", Total);
return ;
}
PTA数据结构与算法题目集(中文) 7-29的更多相关文章
- PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)
PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...
- PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)
PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分) 给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...
- PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)
PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分) 计算机程序设计能力考试(Programming Ability Test,简称P ...
- PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)
PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...
- PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)
PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...
- PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)
PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...
- PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)
PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...
- PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)
PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- PTA数据结构与算法题目集(中文) 7-34
PTA数据结构与算法题目集(中文) 7-34 7-34 任务调度的合理性 (25 分) 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...
随机推荐
- 内网渗透之信息收集-Linux系统篇
linux 系统信息 grep MenTotal /proc/meminfo #查看系统内存总量 cat /etc/issue #查看系统名称 cat /etc/lsb-release #查看系统名称 ...
- 音频相关 ALSA ffmpeg ffplay 命令用法 g7xx
采样率: samples 441100 每秒 DAC/ADC 采样的频率,声卡一般还支持 48k 8k 等模式. 通道:channels 2声道 左右声道 也有单声道的声音,5.1 声道 位数: 16 ...
- ECMAScript进化史(1):话说Web脚本语言王者JavaScript的加冕历史
互联网起火-Web时代的来临 在行文之前,反手就安利一下<浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战>. 浏览器始祖NCSA Mosaic在1993年1月发布(于1992 ...
- Redis主从原理及哨兵模式
1.Redis主从搭建 主从的搭建很简单,主节点设置连接密码,从节点的配置上主节点的ip和端口,以及密码,一般从节点我们都设置只读模式. 主节点配置: 主节点密码: requirepass xxx 从 ...
- POJ 1065 & ZOJ 1025
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> ...
- css 固比固模型
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- frida(hook工具)的环境搭建
一.简介 frida 是一款基于 python+javascript 的 hook 框架,可运行在 android.ios.linux.win等各个平台,主要使用的动态二进制插桩技术. Frida官网 ...
- (转)伪指令LTORG和LTONG浅析
原文地址:http://zqwt.012.blog.163.com/blog/static/1204468420103196564/ 定义和作用 LTORG或LTONG用于声明一个数据缓冲池(也称为文 ...
- 数据挖掘算法——K-means算法
k-means中文称为K均值聚类算法,在1967年就被提出 所谓聚类就是将物理或者抽象对象的集合分组成为由类似的对象组成的多个簇的过程 聚类生成的组成为簇 簇内部任意两个对象之间具有较高的相似度,不 ...
- Spring Cloud - Nacos注册中心入门单机模式及集群模式
近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...