贪心算法.

哈夫曼树

        哈夫曼树(Huffman Tree),又称为霍夫曼树或最优二叉树,是一种带权路径长度最短的二叉树,常用于数据压缩。
        定义:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度(Weighted Path Length, WPL)达到最小,则称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,其中权值较大的结点离根较近。
        如图:a 和 b的权值一定小于c的权值,c的权值一定小于d的权值。证明:若b > c那么交换b 和 c的位置后,该树的总权值为:3a + 3c + 2b +d,所以3a + 3c + 2b +d < 3a + 3b + 2c + d,又因为哈夫曼树的带权路径长度最小,而b > c时,使得该树的总权值增大,违反了哈夫曼树的定义,所以b < c。

题目:148. 合并果子 - AcWing题库

这道题与之前的dp石子合并,不一样。前者是严格相邻的石子堆,而后者是任意石子堆。

本道题就是典型的哈夫曼树问题,注意使用小根堆,使得最小的节点在最前面。

代码:

#include<bits/stdc++.h>using namespace std;int n;int main()
{cin >> n;priority_queue<int, vector<int>, greater<int>> q;for(int i = 0; i < n; i ++ ){int a;cin >> a;q.push(a);}int res = 0;//每次取出来前两个,并将其合并的值推回堆中while(q.size() >= 2){int x = q.top();q.pop();int y = q.top();q.pop();x += y;q.push(x);res += x;}cout << res << endl;return 0;
}

题目:913. 排队打水 - AcWing题库

        思路 

先对样例进行计算:第二个人所需要等待的时间为:3;第三个人用来等待的时间为:3 + 6;
        第四个人所需要等待的时间为:3 + 6 + 1;第五个人用来等待的时间为:3 + 6 + 1 + 4;
        第六个人:3 + 6 + 1 + 4 + 2;第六个人:3 + 6 + 1 + 4 + 2 + 5。

规律就是:所需要等待的总时间 = 第i个人打水所需要的时间 * (n - i)
        公式:a[1]*(n - 1) + a[2] * (n - 2) + ... + a[n] * (n - n)。
越靠前的人,所占用的总时间的乘数更大。所以我们要尽可能的使靠前的人打水时间尽可能的小。所以对所有人打水所需要的时间大小进行排序,时间小的人先打水
证明:
    假设x > y。①x * (n - i) + y * (n - i - 1) = max1; ②y * (n - i) + x * (n - i - 1) = max2
    ① - ② == x - y > 0,所以max1 > max2,所以应将小数放在之前总和更小。

代码:

#include<bits/stdc++.h>using namespace std;int n;
int a[100010];int main()
{cin >> n;for(int i = 1; i <= n; i ++ ) cin >> a[i];sort(a + 1, a + n + 1);long long res = 0;//下标从0开始,需多减去1for(int i = 1; i <= n; i ++) res += a[i] * (n - i);cout << res << endl;return 0;
}

题目:104. 货仓选址 - AcWing题库

        若选点到a、b的总距离的最小值,如右图。那么我们扩展到多点,只要让y在所有区间内,那么选y点到所有点的总距离一定最小,而y点即是所有点的中位数

 代码:

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;int n; 
int a[100010];int main()
{cin >> n;for(int i = 0; i < n; i ++ ) cin >> a[i];sort(a, a + n);//取中点int s = a[n / 2],ans = 0;for(int i = 0; i < n; i ++ ) ans += abs(s - a[i]);cout << ans;
}

题目:125. 耍杂技的牛 - AcWing题库

思路:

 这里叠罗汉是仅仅叠成一束,而非三角。

贴图来源:耍杂技的牛 。
综上,我们对所有的w[ i ] + s[ i ] 求和之后进行排序,当w[ i ] + s[ i ] > w[i + 1] + s[ i + 1 ]时,交换第i与第i + 1头牛会使风险降低;否则当w[ i ] + s[ i ] <= w[i + 1] + s[ i + 1 ],不需要交换就能保证风险最低,所以直接对w[ i ] + s[ i ] 求和之后进行排序进行升序排序即可

代码:

#include<bits/stdc++.h>using namespace std;int n;
typedef pair<int, int> pii;pii a[50010];
int main()
{cin >> n;for(int i = 0; i < n; i ++ ){int w, s;cin >> w >> s;//对重量以及强壮程度的和进行排序a[i]={w + s, w};}sort(a, a + n);int sum = 0, res = -1e9;for(int i = 0; i < n; i ++ ){int x = a[i].first, y = a[i].second;//在所有风险值中取最大值。该危险值 = 先前总质量 - 该牛的强壮程度值res = max(res, sum - x + y);sum += y;//计算先前总质量}cout << res;return 0;
}

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

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

相关文章

普乐蛙VR航天航空体验馆知识走廊VR体验带你登陆月球

VR航天航空设备是近年来随着虚拟现实&#xff08;VR&#xff09;技术的快速发展而兴起的一种新型设备&#xff0c;它结合了航天航空领域的专业知识与VR技术的沉浸式体验&#xff0c;为用户提供了前所未有的航天航空体验。以下是对VR航天航空设备的详细介绍&#xff1a; 一、设备…

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text&#xff0c;白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

Golang | Leetcode Golang题解之第295题数据流的中位数

题目&#xff1a; 题解&#xff1a; type MedianFinder struct {nums *redblacktree.Treetotal intleft, right iterator }func Constructor() MedianFinder {return MedianFinder{nums: redblacktree.NewWithIntComparator()} }func (mf *MedianFinder) AddNum(…

MySQL中多表查询之外连接

首先先来介绍一下我做的两个表&#xff0c;然后再用他们两个举例说明。 -- 创建教师表 create table teachers( id_t int primary key auto_increment, -- 老师编号 name_t varchar(5) -- 姓名 ); -- 创建学生表 create table students( id_s int primary key auto_increment,…

数据结构——单链表OJ题(下)

目录 一、链表的回文结构 思路一&#xff1a;数组法 &#xff08;1&#xff09;注意 &#xff08;2&#xff09;解题 思路二&#xff1a;反转链表法 &#xff08;1&#xff09; 注意 &#xff08;2&#xff09;解题 二、相交链表 &#xff08;1&#xff09;思路&#…

优化算法:1.遗传算法(GA)及Python实现

一、定义 遗传算法就像是在模拟“优胜劣汰”的进化过程&#xff0c;通过选择最优秀的个体&#xff0c;交配产生下一代&#xff0c;并引入一定的变异&#xff0c;逐步优化解决问题。 二、具体步骤 初始化种群(Initialization)&#xff1a; 假设你要找到一个迷宫的最佳出口路径。…

CTF-NSSCTF[GKCTF 2021]

[GKCTF 2021]easycms 考察&#xff1a; 用扫描工具扫描目录&#xff0c;扫描到后台登录界面/admin.php 题目提示了密码是五位弱口令&#xff0c;试了试弱口令admin和12345直接成功了 任意文件下载 点击设计-->主题然后随便选择一个主题&#xff0c;点击自定义&#xff0…

故障诊断 | 基于Transformer故障诊断分类预测(Matlab)

文章目录 预测效果文章概述程序设计参考资料预测效果 文章概述 Transformer故障诊断/分类预测 | 基于Transformer故障诊断分类预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,也就是…

CTF之网站被黑

简单看一下网页和源码没发现什么明显漏洞 那就扫描一下目录 发现了/shell.php文件&#xff0c;访问一下&#xff0c;发现是一个后台管理登录页面 别无他法只能爆破喽&#xff0c;爆破后发现密码是hack flag{25891d9e9d377f006eda3ca7d4c34c4d}

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为&#xff1a; private Date crdat; 2.数据库中的相应字段为&#xff1a; crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为&#xff1a; “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…

RedHat8安装Oracle19C

RedHat8安装Oracle19C 1、 更新yum源 更新yum源为阿里云镜像源&#xff1a; # 进入源目录 cd /etc/yum.repos.d/ # 删除 redhat 默认源 rm redhat.repo # 下载阿里云的centos7源 curl -O http://mirrors.aliyun.com/repo/Centos-8.repo # 替换 Centos-8.repo 中的 $releasev…

初学Mybatis之 Lombok 篇

idea 安装 Lombok 插件&#xff1a; File->Settings->Plugins->搜索 lombok 下载 在项目中导入 lombok 的 jar 包&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.…

C语言程序设计之数学函数篇

程序设计之数学函数 问题1_1代码1_1结果1_1 问题1_2代码1_2结果1 _2 问题1_3代码1_3结果1_3 问题1_1 函数 f u n fun fun 的功能是计算&#xff1a; s ln ⁡ ( 1 ) ln ⁡ ( 2 ) ln ⁡ ( 3 ) ⋯ ln ⁡ ( n ) s\sqrt{\ln(1)\ \ \ln(2)\ \ \ln(3)\ \ \cdots \ \ \ln(n)\ } …

ReentrantReadWriteLock详解

目录 ReentrantReadWriteLock详解1、ReentrantReadWriteLock简介2、ReentrantReadWriteLock类继承结构和类属性3、ReentrantReadWriteLock的读写锁原理分析4、ReentrantReadWriteLock.WriteLock类的核心方法详解非公平写锁的获取非公平写锁的释放公平写锁的获取公平写锁的释放 …

win11查找句柄泄露

1.打开任务管理器&#xff0c;不会的网上搜 2.选择详细信息 3.注意了 比较坑的一点 win11上详细信息不会默认显示句柄数。&#xff08;默认没有句柄那一列&#xff0c;妈的花了我好长时间找&#xff09; 右键&#xff0c;点击选择列 选择句柄 下面的列表里就能看到进程使用…

显著提升“视触觉传感器耐磨性”的贴金工艺,在植物和古生物化石检测上取得良好的识别效果

贴金&#xff0c;一种古老的技艺&#xff0c;是中华民族民间传统工艺的瑰宝&#xff01;金箔和贴金工艺的结合让朴实无华的工艺品重获新生。正如《天工开物》所述&#xff1a;“凡色至于金&#xff0c;为人间华美贵重&#xff0c;故人工成箔而后施之”。这项古老技艺如今可用于…

PyCharm 常用 的插件

Material Theme UI Lite&#xff1a;‌提供多种不同的页面风格&#xff0c;‌为PyCharm界面增添个性化元素。‌Chinese (Simplified) Language Pack&#xff1a;‌为中文用户提供简体中文的界面、‌菜单、‌提示信息&#xff0c;‌提升使用体验。‌Tabnine&#xff1a;‌基于人…

Harmony学习(三)

1.模版字符串 let name:string 模版字符串 let age:number 18 console.log(字符串:,${name}和${age})2.字符串和数字互相转换 //字符串转数字 let str1:string 1.1 console.log(转换,Number(str1)) //output: 1.1 console.log(转换,parseInt(str1)) //output: 1 conso…

3.k8s:服务发布:service,ingress;配置管理:configMap,secret,热更新;持久化存储:volumes,nfs,pv,pvc

目录​​​​​​​ 一、服务发布 1.service &#xff08;1&#xff09;service和pod之间的关系 &#xff08;2&#xff09; service内部服务创建访问 &#xff08;3&#xff09;service访问外部服务 &#xff08;4&#xff09;基于域名访问外部 &#xff08;5&#xff…

Java中的优先级队列(PriorityQueue)(如果想知道Java中有关优先级队列的知识点,那么只看这一篇就足够了!)

前言&#xff1a;优先级队列&#xff08;Priority Queue&#xff09;是一种抽象数据类型&#xff0c;其中每个元素都关联有一个优先级&#xff0c;元素按照优先级顺序进行处理。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 …