当前位置: 首页 > article >正文

【算法学习之路】5.贪心算法

贪心算法

  • 前言
  • 一.什么是贪心算法
  • 二.例题
    • 1.合并果子
    • 2.跳跳!
    • 3. 老鼠和奶酪

前言

我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新,其他的也会陆陆续续的更新,希望大家点赞收藏我会尽快更新的!!!

一.什么是贪心算法

总是只看眼前,并不考虑以后可能造成的影响,将一个最优决策变成多步决策过程,并在每步总是做出当前看起来是最好的选择,它所做的选择只是在某种意义上的局部最优选择可想而知,并不是所有的时候贪心法都能获得最优解,所以一般使用贪心法的时候,都要确保自己能证明其正确性。

二.例题

1.合并果子

洛谷P1090 [NOIP 2004 提高组] 合并果子
在这里插入图片描述

//使用优先队列解决
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;int main() {priority_queue<int, vector<int>, greater<int>>p;//定义一个优先队列且为小顶堆int n; cin >> n;for (int i = 0; i < n; i++) {//将每个数据填入优先队列int a; cin >> a;p.push(a);}int sum = 0;//需要体力的总值while (p.size() > 1) {//当元素只有一个的时候意味着结束//将最小的两个取出来进行合并int first = p.top();p.pop();int last = p.top();p.pop();//将合并的结果填入优先队列int t = first + last;sum += t;p.push(t);}cout << sum;return 0;
}

2.跳跳!

洛谷P4995 跳跳!
在这里插入图片描述

//用列表解决
#include <iostream>
#include <list>
#include <cstdlib>
using namespace std;int main() {list<long long> s;//由于数据过大,需要用到long longint n; cin >> n;for (int i = 0; i < n; i++) {//将所有数据填入列表long long a; cin >> a;s.push_back(a);}s.sort();//将列表进行排序long long sum = 0;//消耗的总体力值long long first = 0;long long last = 0;while (s.size() > 0) {//当没有元素结束last = s.back();s.pop_back();sum += (last - first) * (last - first);if (s.size() > 0) {//如果元素是奇数first = s.front();s.pop_front();sum += (last - first) * (last - first);}}cout << sum;return 0;
}

3. 老鼠和奶酪

力扣2611. 老鼠和奶酪
在这里插入图片描述

static int cmp(const void* pa, const void* pb) {//比较函数return *(int *)pa - *(int *)pb;
}int miceAndCheese(int* reward1, int reward1Size, int* reward2, int reward2Size, int k) {int sum = 0;//总值int diff[reward1Size];//两只老鼠的差值for(int i = 0; i < reward1Size; i++){sum += reward2[i];//先将所有的奶酪给第二只老鼠吃diff[i] = reward1[i] - reward2[i];//计算出两个老鼠的差值}qsort(diff, reward1Size, sizeof(int), cmp);//将差值排序for(int i = 1; i <= k; i++){sum += diff[reward1Size - i];//将差值填入总数}return sum;
}

相关文章:

【算法学习之路】5.贪心算法

贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳&#xff01;3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完&#xff0c;形成一套完整的算法体系&#xff0c;以及大量的各个难度的题目&#xff0c;目前算法也写了几篇&#xff0c;题单正在更新&#xf…...

0x03 http协议和分层架构

HTTP协议 简介 Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应HTTP协议是无状态的协议&#xff…...

ES批量查询

在 Elasticsearch 中&#xff0c;multi_search&#xff08;也称为 msearch&#xff09;是一种允许你在单个请求中执行多个搜索操作的 API。它可以显著减少网络开销&#xff0c;尤其是在需要执行多个查询时。multi_search 会将多个查询打包成一个请求发送给 Elasticsearch&#…...

React Refs:深入理解与最佳实践

React Refs&#xff1a;深入理解与最佳实践 引言 在React中&#xff0c;refs是用于访问DOM元素或组件实例的一种方式。与类组件的ref属性不同&#xff0c;函数组件的ref需要使用useRef钩子。正确使用refs可以大大提升React应用的性能和可维护性。本文将深入探讨React Refs的原…...

智能合约安全指南 [特殊字符]️

智能合约安全指南 &#x1f6e1;️ 1. 安全基础 1.1 常见漏洞类型 重入攻击整数溢出权限控制缺陷随机数漏洞前后运行攻击签名重放 1.2 安全开发原则 最小权限原则检查-生效-交互模式状态机安全失败保护机制 2. 重入攻击防护 2.1 基本防护模式 contract ReentrancyGuarde…...

【Python项目】基于Python的书籍售卖系统

【Python项目】基于Python的书籍售卖系统 技术简介&#xff1a;采用Python技术、MYSQL数据库等实现。 系统简介&#xff1a;书籍售卖系统是一个基于B/S结构的在线图书销售平台&#xff0c;主要分为前台和后台两部分。前台系统功能模块分为&#xff08;1&#xff09;用户中心模…...

【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)

【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信&#xff08;未成功版&#xff09; 上次说基于UDP的打洞程序改了五版一直没有成功&#xff0c;要写一下问题所在&#xff0c;但是我后续又查询了一些资料&#xff0c;成功实现了&#xff0c;这次先写一下未成功的…...

(1)udp双向通信(2)udp实现文件复制(3)udp实现聊天室

一.udp双向通信 1.fork进程实现双向通信 【1】head.h 【2】client客户端 &#xff08;1&#xff09;父进程从键盘获取字符串 &#xff08;2&#xff09;输入quit&#xff0c;发送结束子进程信号 &#xff08;3&#xff09;exit退出父进程 &#xff08;1&#xff09;子进程接受…...

c高级第五天

1> 在终端提示输入一个成绩&#xff0c;通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash# 提示用户输入成绩 read -p "请输入成绩&#xff08;0-100&#xff09;&#xff1a;" score# 判断成…...

【JQuery—前端快速入门】JQuery 操作元素

JQuery 操作元素 1. 获取/修改元素内容 三个简单的获取元素的方法&#xff1a; 这三个方法即可以获取元素的内容&#xff0c;又可以设置元素的内容. 有参数时&#xff0c;就进行元素的值设置&#xff0c;没有参数时&#xff0c;就进行元素内容的获取. 接下来&#xff0c;我们需…...

深度学习-139-RAG技术之Agentic Chunking分块技术的工作原理及简单实现

文章目录 1 传统分块的问题2 Agentic Chunking的工作原理3 Agentic Chunking怎么实现3.1 Propositioning文本3.1.1 大语言模型3.1.2 官方提示词模板3.1.3 抽取链3.2 使用LLM Agent创建文本块3.2.1 创建新文本块3.2.2 将proposition添加到文本块3.2.3 将proposition推送到合适的…...

BambuStudio学习笔记:Flow 类

Flow 类文档 概述 Flow 类用于管理3D打印过程中的挤出流程参数计算&#xff0c;包括挤出宽度、间距、流量等核心参数。支持桥梁模式、不同流程角色配置&#xff0c;提供多种流量计算方式。 头文件 #ifndef slic3r_Flow_hpp_ #define slic3r_Flow_hpp_ // ... #endif枚举类型…...

标签的ref属性 vue中为什么不用id标记标签

标签的ref属性 vue中为什么不用id标记标签 假设有一对父子组件&#xff0c;如果父组件和子组件中存在id相同的标签&#xff0c;会产生冲突。通过id获取标签会获取到先加载那个标签。 标签的ref属性的用法 在父组件App中&#xff0c;引入了子组件Person。 并使用ref标记了Pe…...

7.1.1 计算机网络的组成

文章目录 物理组成功能组成工作方式完整导图 物理组成 计算机网络是将分布在不同地域的计算机组织成系统&#xff0c;便于相互之间资源共享、传递信息。 计算机网络的物理组成包括硬件和软件。硬件中包含主机、前端处理器、连接设备、通信线路。软件中包含协议和应用软件。 功…...

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 JetBrains IDEA&…...

mapbox基础,使用点类型geojson加载symbol符号图层,用于标注文字

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️symbol符号图层样式二、🍀使用点类型…...

STM32---FreeRTOS中断管理试验

一、实验 实验目的&#xff1a;学会使用FreeRTOS的中断管理 创建两个定时器&#xff0c;一个优先级为4&#xff0c;另一个优先级为6&#xff1b;注意&#xff1a;系统所管理的优先级范围 &#xff1a;5~15 现象&#xff1a;两个定时器每1s&#xff0c;打印一段字符串&#x…...

Python 网络爬虫教程与案例详解

Python 网络爬虫教程与案例详解 在当今数字化时代&#xff0c;数据的价值愈发凸显。Python 作为一门强大的编程语言&#xff0c;在数据获取领域有着广泛的应用&#xff0c;其中网络爬虫便是一项重要的技术。网络爬虫能够自动从网页中提取所需数据&#xff0c;极大地提高了数据…...

HTTP 状态代码 501 502 问题

问题 单个客户端有时会出现 报错 501 或 502 如下&#xff1a; System.Net.Http.HttpRequestException: Response status code does not indicate success: 501 (Not Implemented) 分析 可以排除 服务器无法处理的问题&#xff08;测试发现 一个客户端报错&#xff0c;不会影响…...

React 之 Redux 第二十八节 学习目标与规划大纲及概要讲述

接下来 开始Redux 全面详细的文档输出&#xff0c;主要基于一下几个方面&#xff0c;欢迎大家补充指正 一、Redux 基础概念 为什么需要 Redux&#xff1f; 前端状态管理的挑战&#xff08;组件间通信、状态共享&#xff09; Redux 解决的问题&#xff1a;集中式、可预测的状态…...

visual studio 2022 手工写一个简单的MFC程序

书籍&#xff1a;《Visual C 2017从入门到精通》的2.1.2 MFC方式中2.手工写一个简单的MFC程序 环境&#xff1a;visual studio 2022 内容&#xff1a;手工写一个简单的MFC程序 1.文件->新建->项目 2.根据以下步骤选择Windows桌面向导 3.输入项目名&#xff0c;选择保…...

GaussDB自带诊断工具实战指南

一、引言 GaussDB是一种分布式的关系型数据库。在数据库运维中&#xff0c;快速定位性能瓶颈、诊断故障是保障业务连续性的关键。GaussDB内置了多种诊断工具&#xff0c;结合日志分析、执行计划解析和实时监控功能&#xff0c;帮助开发者与运维人员高效解决问题。本文深入讲解…...

python GUI之实现一个自定义的范围滑块控件:QRangeSlider

在图形用户界面&#xff08;GUI&#xff09;开发中&#xff0c;滑块控件是一种常用于选择数值范围的交互元素。然而&#xff0c;很多时候默认的滑块控件无法满足复杂的交互需求&#xff0c;例如同时选择一个范围的起始值和结束值。为此&#xff0c;实现了一个自定义的范围滑块控…...

测试用例总结

一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件&#xff1b;    6、测试输入&#xff1b;    7、操作步骤&#xff1b;    8、预期输出 二、具体分析通…...

深度学习之图像学习知识点

数据增广&#xff1a; 数据增广是深度学习中常用的技巧之一&#xff0c;主要用于增加训练数据集&#xff0c;让数据集尽可能的多样化&#xff0c;使得训练的模型具有更强的泛化能力&#xff0c;目前数据增广主要包括&#xff1a;水平/垂直翻转&#xff0c;旋转&#xff0c;缩放…...

vulnhub靶场之【digitalworld.local系列】的development靶机

前言 靶机&#xff1a;digitalworld.local-devt-improved&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&…...

C语言---猜数字游戏

猜数字游戏代码 #include <stdio.h> #include <time.h> #include <stdlib.h>void meun() {printf("**********************\n");printf("******* 1.play *******\n");printf("******* 0.quit *******\n");printf("*****…...

C#中泛型的协变和逆变

协变&#xff1a; 在泛型接口中&#xff0c;使用out关键字可以声明协变。这意味着接口的泛型参数只能作为返回类型出现&#xff0c;而不能作为方法的参数类型。 示例&#xff1a;泛型接口中的协变 假设我们有一个基类Animal和一个派生类Dog&#xff1a; csharp复制 public…...

Select 下拉菜单选项分组

使用<select>元素创建下拉菜单&#xff0c;并使用 <optgroup> 元素对选项进行分组。<optgroup> 元素允许你将相关的 <option> 元素分组在一起&#xff0c;并为每个分组添加一个标签。 <form action"#" method"post"><la…...

文件上传漏洞详细利用流程

一、了解基本术语 1、后门 像房子一样&#xff0c;前门后门都可以进出房子&#xff0c;而较之前门&#xff0c;后门更具有隐蔽性。电脑技术中的后门是抽象概念&#xff0c;意指隐蔽性高或不常用的&#xff0c;区别于常规操作所使用的一种出入口。现金网络后门形形色色&#x…...