算法学习笔记之贪心算法

news2025/2/19 2:29:27

导引(硕鼠的交易)

硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。

仓库有N个房间,第i个房间有 J[i] 磅奶酪并需要 F[i] 磅猫粮交换,硕鼠可以按比例来交换,不必交换所有的奶酪

计算硕鼠最多能得到多少磅奶酪。

输入M和N表示猫粮数量和房间数量,随后输入N个房间,每个房间包括奶酪数和猫粮数

Input

 5 3
 7 2
 4 3
 5 2
 -1 -1

Output

 13.333

解法:计算每个房间的奶酪与猫粮之比,比值越大硕鼠收益越高,将所有比值从大到小排序,最后选择比值大的即可。

例1(田忌赛马)

问题描述:田忌与齐王赛马,每匹马的速度不同。

目标:赢得最多的比赛。

策略:利用田忌的最弱的马去对齐王的最强的马,反之亦然。

不要固定认为是将田忌第一强的马与齐王第二强的马进行比较,因为可能田忌第一强的马比齐王第一强的马更强

经典贪心(事件序列问题)

命题:至少存在一个最长的事件序列,包含最早结束的事件

采用反证法证明:假设有一个最长的事件序列bcdef,不包含最早结束的事件a,显然a在b之前结束,那么事件序列acdef依旧是最短事件序列。

显然,选中最早结束的事件对最长的事件序列无影响。

那么,我们可以选中最早结束的事件0,然后再选中发生时刻大于等于3,且结束时刻最小的事件;

继续选中事件1,然后再选中发生时刻大于等于4,且结束时刻最小的事件;

继续选中事件5,然后再选中发生时刻大于等于10,且结束时刻最小的事件;

继续选中事件8,然后再选中发生时刻大于等于15,且结束时刻最小的事件;

继续选中事件10,然后发现没有可选事件了,最长事件序列为0,1,5,8,10

贪心思路:先把所有事件按结束时刻从大到小排序,随后每次选择一个最早结束且和之前不冲突的事件

例2(搬桌子)

一层楼的布局如上,现在需要将一些桌子从一个房间搬到另一个房间。无论距离远近,每趟搬运都需要十分钟。

当你从房间 i 搬桌子到房间 j 时,房间 i 到房间 j 的走廊被占用,也就是同一时间的走廊是互斥的。

现在需要计算完成所有搬运任务最少需要多长时间。

输出包含T组用例。首先输入一个正整数N,表示需要搬运的桌子数,接下来N行,每行包含2个正整数a和b,表示需要将桌子从a房间搬到b房间

输出为每组用例搬运任务需要的最少时间。

思路:记录每段区间的走廊被占用的次数,重合的次数就是需要搬运的次数

 #include<iostream>
 ​
 using namespace std;
 ​
 int t, i, j, N, P[200]; 
 int s, d, temp, k, MAX;
 ​
 int main()
 {
     cin >> t;
     for(i = 0; i < t; i++)
     {
         // 初始化 
         for(j = 0; j < 200; j++)
         {
             P[j] = 0;
         }
         cin >> N;
         for(j = 0; j < N; j++)
         {
             cin >> s >> d;
             s = (s-1)/2;
             d = (d-1)/2;
             if(s > d)
             {
                 swap(s, d);
             }
             for(k = s; k <= d; k++)
             {
                 P[k]++;
             }
         }
         MAX = -1;
         for(j = 0; j < 200; j++)
         {
             MAX = max(MAX, P[j]);
         }
         cout << MAX*10 << endl;
     }
     return 0;
 }

例3(删数问题)

思路:显然高位越小越好。每次比较相邻两数,若左边比右边大则删去左边的数,否则继续比较后面的数。

例4(青蛙的邻居)

输入t组样例,每组样例先输入n个湖泊,每个青蛙呆在不同湖泊里面,然后输入n青蛙的邻居个数,问能否根据这些数据构成一个图。

问题本质:可图性判断

1、度序列:若把图G所有顶点的度数排成一个序列S,则称S为图G的度序列。

2、序列是可图的:一个非负整数组成的有限序列如果是某个无向图的度序列,则称该序列是可图的。

算法:Havel-Hakimi定理

由非负整数组成的非增序列S:d1 , d2, ... dn(n >= 2, d1 >= 1)是可图的,当且仅当序列S1:d2-1, d3-1, ..., dd1+1-1, dd1+2, ... ,dn是可图的。

其中,序列S1中有n-1个非负整数,S序列中d1后的前d1个度数(即d2 ~ dd1+1)减 1 后构成S1中的前d1个数。

通俗理解

假设有一群人的邻居数为递增序列 5 4 4 3 2 1 1,若该序列成立,则第一个人有5个邻居,假设第一个人的五个邻居分别是2,3,4,5,6

当第一个人搬走了,剩下的人邻居个数为 3 3 2 1 0 1;排序后为为3 3 2 1 1 0

当第二个人搬走了,剩下的人邻居个数为 2 1 0 1 0;排序后为为2 1 1 0 0

当第三个人搬走了,剩下的人邻居个数为 0 0 0 0,此时该序列成立。

特别说明:若要用贪心算法求解某问题的整体最优解,必须首先证明贪心思想在该问题的应用结果就是最优解!!

sort函数的使用

头文件

 #include<algorithm>

函数用法

sort(首地址,尾地址+1,cmp函数);

当不传入cmp函数时,默认递增

例:

 struct node{
     int a;
     double b;
 }arr[100];
 // 要求先按a升序,若a相等则按b降序
 bool cmp(node x, node y)
 {
     if(x.a != y.a)
     {
         return x.a < y.a;
     }
     return x.b > y.b;
 }

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

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

相关文章

DeepSeek R1 “顿悟时刻”(Aha Moment) 的重现与探索:基于 GRPO 的倒计时游戏训练

本文翻译整合转载于&#xff1a; Deepseek R1 是如何训练的Mini-R1&#xff1a;重现 Deepseek R1 的 “顿悟时刻” RL 教程 Deepseek R1 的发布震惊了整个行业。为什么&#xff1f;DeepSeek-R1 是一个开放模型&#xff0c;在复杂推理任务中可与 OpenAI 的 o1 相媲美&#xff0c…

【JavaScript爬虫记录】记录一下使用JavaScript爬取m4s流视频过程(内含ffmpeg合并)

前言 前段时间发现了一个很喜欢的视频,可惜网站不让下载,简单看了一下视频是被切片成m4s格式的流文件,初步想法是将所有的流文件下载下来然后使用ffmpeg合并成一个完整的mp4,于是写了一段脚本来实现一下,电脑没有配python环境,所以使用JavaScript实现,合并功能需要安装ffmpeg,…

【线性代数】1行列式

1. 行列式的概念 行列式的符号表示: 行列式的计算结果:一个数 计算模型1:二阶行列式 二阶行列式: 三阶行列式: n阶行列式: 🍎计算行列式 计算模型2:上三角形行列式 上三角形行列式特征:主对角线下皆为0。 上三角形行列式: 化上三角形通用方法:主对角线下,…

数据结构(考研)

线性表 顺序表 顺序表的静态分配 //线性表的元素类型为 ElemType//顺序表的静态分配 #define MaxSize10 typedef int ElemType; typedef struct{ElemType data[MaxSize];int length; }SqList;顺序表的动态分配 //顺序表的动态分配 #define InitSize 10 typedef struct{El…

安装WPS后,导致python调用Excel.Application异常,解决办法

在使用xlwings编辑excel文件时&#xff0c;默认调用的是“Excel.Application”&#xff0c;如果安装过wps&#xff0c;会导致该注册表为WPS&#xff0c;会导致xlwings执行异常 因为安装过WPS&#xff0c;导致与Excel不兼容的问题&#xff0c;想必大家都听说过。有些问题及时删…

vue3实战-----集成sass

vue3实战-----集成sass 1.安装2.使用3.全局样式文件中不能使用变量 1.安装 在使用scss之前需要安装sass和sass-loader两个插件。 2.使用 安装好之后就可以在组件中使用scss了。需要加上lang“scss”。 注意:scss中变量用$,less中变量用。 3.全局样式文件中不能使用变量 …

二分查找sql时间盲注,布尔盲注

目录 一&#xff1a;基础知识引导 数据库&#xff1a;information_schema里面记录着数据库的所有元信息 二&#xff0c;布尔盲注&#xff0c;时间盲注 &#xff08;1&#xff09;布尔盲注案例&#xff08;以sqli-labs第八关为例&#xff09;&#xff1a; &#xff08;2&am…

计算机网络-MPLS转发原理

在上一篇关于 MPLS 基础的文章中&#xff0c;我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天&#xff0c;我们将深入探讨 MPLS 转发的原理与流程&#xff0c;帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

【H5自适应】高端科技类pbootcms网站模板 – 三级栏目、下载与招聘功能支持

(H5自适应)高端大气的科技类pbootcms网站模板 带三级栏目、下载和招聘功能 后台地址&#xff1a;您的域名/admin.php 后台账号&#xff1a;admin 后台密码&#xff1a;123456 为了提升系统安全&#xff0c;请将后台文件admin.php的文件名修改一下。修改之后&#xff0c;后台…

【Java 面试 八股文】框架篇

框架篇 1. Spring框架中的单例bean是线程安全的吗&#xff1f;2. 什么是AOP&#xff1f;3. 你们项目中有没有使用到AOP&#xff1f;4. Spring中的事务是如何实现的&#xff1f;5. Spring中事务失效的场景有哪些&#xff1f;6. Spring的bean的生命周期&#xff1f;7. Spring中的…

自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?

TDD&#xff08;测试驱动开发&#xff09;和BDD&#xff08;行为驱动开发&#xff09;是两种独特的软件开发技术&#xff0c;它们在测试的内容和方式上有所不同。尽管名称相似&#xff0c;但服务于不同的目的。 什么是TDD&#xff1f; TDD代表测试驱动开发。它是一个过程&…

DeepSeek 助力 Vue 开发:打造丝滑的进度条

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记

时间轴呈现事故进程 17:00&#xff1a;开发人员小李正在尝试利用 Python 爬虫从企查查&#xff08;https://www.qcc.com&#xff09;抓取公司工商信息。原本一切正常&#xff0c;但突然发现信息采集失败&#xff0c;程序抛出大量选择器错误。17:15&#xff1a;小李发现&#x…

微信服务号推送消息

这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户

24电子信息类研究生复试面试问题汇总 电子信息类专业知识问题最全!电子信息复试全流程攻略 电子信息考研复试真题汇总

你是不是在为电子信息考研复试焦虑&#xff1f;害怕被老师问到刁钻问题、担心专业面答不上来&#xff1f;别慌&#xff01;作为复试面试92分逆袭上岸的学姐&#xff0c;今天手把手教你拆解电子信息类复试通关密码&#xff01;看完这篇&#xff0c;让你面试现场直接开大&#xf…

嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc

EasyRTC已经完美支持海思hi3516cv610&#xff0c;编译器arm-v01c02-linux-musleabi-gcc&#xff0c;总体SDK大小控制在680K以内&#xff08;预计还能压缩100K上下&#xff09;&#xff1a; EasyRTC在hi3516cv610芯片上能双向通话、发送文字以及二进制指令&#xff0c;总体运行…

计算机视觉中图像的基础认知

一、图像/视频的基本属性 在计算机视觉中&#xff0c;图像和视频的本质是多维数值矩阵。图像或视频数据的一些基本属性。 宽度&#xff08;W&#xff09; 和 高度&#xff08;H&#xff09; 定义了图像的像素分辨率&#xff0c;单位通常是像素。例如&#xff0c;一张 1920x10…

Docker Desktop WebAPI《1》

方法1 》》生成 的文档不要动&#xff0c; 》》执行 Container&#xff08;Dockerfile&#xff09; 会生成镜像文件和容器 》》生成的镜像和容器 在 Docker Desktop 中可以查看 用VS 的 Container Dockerfile 调试 但把这个调试工工具 停止&#xff0c;WebAPi就不能访问了 …

《OpenCV》——特征提取与匹配方法

特征提取 特征提取是从原始数据中提取出能够代表数据本质特征和关键信息的过程&#xff0c;在很多领域都有广泛应用。原始数据往往包含大量的冗余信息&#xff0c;特征提取的目的是去除这些冗余&#xff0c;提取出最具代表性、最能区分不同类别或模式的特征&#xff0c;从而降…