贪心算法经典问题

目录

贪心思想

一、Dijkstra最短路问题

问题描述:

贪心策略:

二、Prim 和 Kruskal 最小生成树问题

Prim 算法:

Kruskal 算法:

三、Huffman树问题

问题描述:

贪心策略:

四、背包问题

问题描述:

贪心策略:

五、硬币找零问题

问题描述:

贪心策略:

六、区间合并问题

问题描述:

贪心策略:

七、选择不相交区间问题

问题描述:

贪心策略:

八、区间选点问题

问题描述

贪心策略

九、区间覆盖问题

问题描述:

贪心策略:

十、区间分组问题

问题描述:

贪心策略:

十一、任务调度问题

问题描述:

贪心策略:

十二、加油站问题

问题描述:

贪心策略:

十三、跳跃游戏

问题描述:

贪心策略:

十四、跳跃游戏 II

问题描述:

贪心策略:

 十五、股票买卖问题

问题描述:

贪心策略:

十六、最小代价贪心问题

问题描述:

贪心策略:

1.https://codeforces.com/contest/2118/problem/C

思路:

代码:

2.https://codeforces.com/contest/1722/problem/D

思路:

代码:

十七、其他

1.B-黄_牛客小白月赛118

思路:

代码:

2.https://codeforces.com/problemset/problem/2116/B

思路及代码:cf2116B-CSDN博客

3.https://codeforces.com/problemset/problem/2067/B

思路及代码:cf2067B-CSDN博客

4.https://codeforces.com/problemset/problem/2059/B

思路及代码:cf2059B-CSDN博客

5.https://codeforces.com/contest/1760/problem/E

思路:

代码:

6.https://codeforces.com/contest/2110/problem/C

 思路及代码:cf2110C-CSDN博客


贪心思想

        贪心算法(Greedy Algorithm)是一种在求解问题时,每一步都选择当前最优解,以期望最终得到全局最优解的算法思想。贪心算法的基本思想可以总结为“每一步都做出一个局部最优的选择,最终就能得到全局最优解”。

一、Dijkstra最短路问题

问题描述:

在一个图中,找到从起点到其他所有点的最短路径(适用于无负边权的情况)。

贪心策略:

每次扩展离源点最近的未访问节点。

二、Prim 和 Kruskal 最小生成树问题

Prim 算法:

从任意一个顶点开始,逐步加入与当前树连接权重最小的边。

Kruskal 算法:

按边权从小到大排序,依次加入不会形成环的边。

三、Huffman树问题

问题描述:

构造一个带权路径长度最小的二叉树,用于数据压缩中的最优前缀编码。

贪心策略:

每次合并两个频率最小的节点。

四、背包问题

问题描述:

物品可以取部分,目标是在容量限制下最大化总价值。

贪心策略:

按单位重量价值从高到低依次选取。

五、硬币找零问题

问题描述:

给定不同面值的硬币,求最少数量凑出某个金额。

贪心策略:

优先使用最大面值的硬币。

六、区间合并问题

问题描述:

给定多个区间,合并所有有重叠或相邻的区间,返回合并后的无重叠区间列表。

贪心策略:

按左端点排序后依次处理,若当前区间与结果中最后一个区间重叠,则合并。

七、选择不相交区间问题

问题描述:

给定多个时间区间,从中选择尽可能多的互不重叠的区间。

贪心策略:

按右端点从小到大排序,每次选择最早结束的区间,跳过与其冲突的区间。

八、区间选点问题

问题描述

在每个区间中至少选一个点,使得这些点覆盖所有区间,要求所选点的数量最少。

贪心策略

按右端点排序,每次在当前未被覆盖的区间的右端点上选一个点。

九、区间覆盖问题

问题描述:

给定一个目标区间和若干子区间,判断是否能用这些子区间完全覆盖目标区间。

贪心策略:

按左端点排序,从起点开始,每次选择能延伸最远的区间,逐步扩展覆盖范围。

十、区间分组问题

问题描述:

将一组区间分成若干个组,每组内的区间互不重叠,要求使用的组数最少。

贪心策略:

按左端点排序,使用最小堆维护各组的最早可用时间,优先将当前区间分配给最早空闲的组。

十一、任务调度问题

问题描述:

给定若干任务及其完成期限和利润,选择能获得最大利润的任务序列。

贪心策略:

按利润降序排序,依次尝试安排任务在最后可行的时间点。

十二、加油站问题

问题描述:

一辆车绕一圈油路,判断是否可以从某一点出发完成一圈,并找出该起点。

贪心策略:

维护当前油量和总油量,若当前油量为负则重新设置起点。

十三、跳跃游戏

问题描述:

数组中每个元素代表可跳跃的最大步数,判断是否可以到达最后一个位置。

贪心策略:

维护当前能跳到的最远位置,逐步推进。

十四、跳跃游戏 II

问题描述:

在跳跃游戏中,求最少跳跃次数到达终点。

贪心策略:

维护当前能跳的最远边界,以及下一步的最远可达。

 十五、股票买卖问题

问题描述:

允许多次买卖,但每次只能持有一股。

贪心策略:

只要第二天价格比今天高,就买入卖出。

十六、最小代价贪心问题

问题描述:

在有限操作次数内,通过优先选择代价最低的操作使目标值最大化。

贪心策略:

按操作代价从小到大依次选择操作,直到操作次数用尽。

1.https://codeforces.com/contest/2118/problem/C

思路:

        统计每个数字每一位变1的代价,排序取最小的 n 个即可。

代码:
void solve()
{ll n, k;cin >> n >> k;vector<ll> a(n + 10);cin >> a;vector<ll> v;ll ans = 0;for (ll i = 0; i < n; ++i){ll x = a[i];ll cnt = 0;for (ll j = 0; j < 63; ++j){if (x >> j & 1ll)ans++;elsev.pb(1ll << j);}}sort(all(v));for (auto x : v){if (k <= 0)break;if (k >= x){ans++;k -= x;}}cout << ans << endl;
}

2.https://codeforces.com/contest/1722/problem/D

思路:

        统计每个字符最大贡献与当前贡献的差值,排序即可。

代码:
void solve()
{int n;string s;cin >> n >> s;s = ' ' + s;ll ans = 0;vector<int> maxx(n + 10, 0);for (int i = 1; i <= n; ++i){if (s[i] == 'L'){maxx[i] = {abs(max(i - 1, (n - i)) - (i - 1))};ans += i - 1;}else{maxx[i] = {abs(max(i - 1, (n - i)) - (n - i))};ans += n - i;}}sort(maxx.begin() + 1, maxx.begin() + 1 + n, greater<int>());for (int i = 1; i <= n; ++i){ans += maxx[i];cout << ans << ' ';}cout << endl;
}

十七、其他

这类题目不是经典的贪心模型,但是解题思路是基于贪心策略的题目。

1.B-黄_牛客小白月赛118

思路:

        每次配对 a[i] 和 a[i + 1],如果不互质,就将 a[i + 1] 变为 1,因为 a[i] 在之前可能与其他的元素配对了,选择修改 a[i + 1] 是更优的。

代码:
void solve()
{int n;cin >> n;vector<ll> a(n + 10);for (int i = 0; i < n; ++i)cin >> a[i];ll ans = 0;for (int i = 0; i < n - 1; ++i){if (__gcd(a[i], a[i + 1]) != 1){a[i + 1] = 1;++ans;}}cout << ans << endl;
}

2.https://codeforces.com/problemset/problem/2116/B

思路及代码:cf2116B-CSDN博客

3.https://codeforces.com/problemset/problem/2067/B

思路及代码:cf2067B-CSDN博客

4.https://codeforces.com/problemset/problem/2059/B

思路及代码:cf2059B-CSDN博客

5.https://codeforces.com/contest/1760/problem/E

思路:

        题目要求统计i<j 且 a_i>a_j 的索引对数,由于只有 0、1 两种元素,所以只需统计 1 后面有几个 0 即可;我们还可以将 1 个元素取反,不难发现将第一个值为 0 的元素变 1 或最后一个值为1 的元素变 0 贡献最大,可证明该贪心策略成立,由于数据量不大,直接把三种情况都统计一遍即可(不变的也要统计)。

代码:
void solve()
{int n;cin >> n;vi a(n + 10), b;cin >> a;vi cnt1(n + 10, 0);int cur = 0;for (int i = n - 1; ~i; --i)if (a[i] == 0)++cur;elsecnt1[i] = cur;b = a;for (int i = 0; i < n; ++i)if (b[i] == 0){b[i] = 1;break;}vi cnt2(n + 10, 0);cur = 0;for (int i = n - 1; ~i; --i)if (b[i] == 0)++cur;elsecnt2[i] = cur;b = a;for (int i = n - 1; ~i; --i)if (b[i] == 1){b[i] = 0;break;}vi cnt3(n + 10, 0);cur = 0;for (int i = n - 1; ~i; --i)if (b[i] == 0)++cur;elsecnt3[i] = cur;ll ans1 = 0, ans2 = 0, ans3 = 0;for (int i = 0; i < n; ++i)ans1 += cnt1[i];for (int i = 0; i < n; ++i)ans2 += cnt2[i];for (int i = 0; i < n; ++i)ans3 += cnt3[i];cout << max({ans1, ans2, ans3}) << endl;
}

6.https://codeforces.com/contest/2110/problem/C

 思路及代码:cf2110C-CSDN博客

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

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

相关文章

零知开源——STM32F4实现ILI9486显示屏UI界面系列教程(一):电子书阅读器功能

本教程将详细介绍如何在零知增强板上使用3.5寸ILI9486显示屏实现电子书阅读器功能。我们将使用LVGL库构建用户界面&#xff0c;并实现翻页、进度显示等核心功能。 目录 一、硬件连接 二、软件UI组件实现 三、零知IDE配置 四、演示效果 五、常见问题解决 六、总结与扩展 一…

支持selenium的chrome driver更新到137.0.7151.119

最近chrome释放新版本&#xff1a;137.0.7151.119 如果运行selenium自动化测试出现以下问题&#xff0c;是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…

架构下的最终瓶颈:数据库如何破局?

在分布式系统和云原生架构逐渐成熟的当下&#xff0c;我们已能够灵活扩展计算资源、水平扩展服务节点、拆分业务模块等。然而&#xff0c;在经历过多轮架构优化之后&#xff0c;数据库常常成为系统的“最后瓶颈”。尤其当数据量、并发量、实时性要求剧增时&#xff0c;数据库即…

湖北理元理律师事务所小微企业债务重组方案:司法与经营的共生逻辑

小微企业债务问题常陷入“救企业还是保老板”的困局。湖北理元理律师事务所为某汽车零部件供应商设计的“经营性债务重组”方案&#xff0c;提供了创新解题思路。 核心矛盾拆解 该企业面临三重困境&#xff1a; 矛盾类型 具体表现 法律风险等级 担保链危机 老板个人担保牵…

FastAdmin退出登录不提示的修改方法

修改退出登录后的提示行为 在FastAdmin中&#xff0c;默认退出登录后会显示"退出成功"的提示信息并跳转页面。要实现不显示提示信息直接跳转&#xff0c;可以通过以下方式修改&#xff1a; 方法一&#xff1a;修改控制器逻辑 找到application/admin/controller/Log…

工信部发布《中国工业软件产业发展研究报告(2025)》:PLM垄断加剧,Ai为国产PLM软件发展契机

在6月17日上午举行的2025南京软件大会开幕式上&#xff0c;工信部电子第五研究所现场发布《中国工业软件产业发展研究报告&#xff08;2025&#xff09;》&#xff08;以下简称《研究报告》&#xff09;&#xff0c;并从工业软件产业发展现状、产业发展趋势&#xff0c;以及我国…

Flutter JSON解析全攻略:使用json_serializable实现高效序列化

引言&#xff1a;为什么我们需要JSON序列化工具&#xff1f; 在现代移动应用开发中&#xff0c;与服务器进行数据交互是必不可少的功能。JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;因其易读性、简洁性和广泛支持性&…

shelve模块的使用

shelve模块的使用 1. 什么是Shelve2. Shelve模块的数据存储与读取3. Shelve的读取数据4. Shelve模块的高级操作_ Shelve的数据更新和删除5. 删除操作可以使用del语句&#xff1a;6. Shelve的数据查询和处理_使用for循环来遍历Shelve对象中的所有键值对&#xff1a;7. Shelve模块…

python大学校园旧物捐赠系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…

Python爬虫实战:研究eventlet库相关技术

1. 引言 在当今信息爆炸的时代,网络上的数据量呈现出指数级增长的趋势。从海量的网络信息中获取有价值的数据并进行分析,对于企业决策、学术研究以及个人兴趣等方面都具有重要意义。网络爬虫作为一种自动化获取网页内容的技术手段,应运而生并得到了广泛的应用。 网络爬虫(…

文字识别接口-智能文本处理-文字提取技术

文字识别接口&#xff0c;顾名思义&#xff0c;就是一种将图像文字或手写文字转换为可编辑文本的技术。文字识别接口&#xff0c;基于深度学习算法与自主ocr核心实现多种场景字符的高精度识别与结构化信息提取&#xff0c;现已被广泛应用于银行、医疗、财会、教育等多个领域。 …

Redis的持久化机制详细解析

Redis的持久化机制详细解析 今天我们来聊聊Redis的持久化机制。想象一下&#xff0c;你正在玩一个非常精彩的游戏&#xff0c;突然断电了&#xff0c;如果没有存档功能&#xff0c;所有的进度都会丢失&#xff0c;是不是很崩溃&#xff1f; Redis作为内存数据库&#xff0c;同…

2025年SYN-CC混合攻击防御实战:某金融平台抵御800Gbps双重风暴实录

“你以为防住SYN Flood就能高枕无忧&#xff1f;新型SYN-CC混合链正在撕裂传统防御体系&#xff01;” 一、事件现场&#xff1a;一场精准的“协议层绞杀” 2025年5月&#xff0c;某跨境支付平台遭遇史上首次SYN-CC混合攻击&#xff0c;峰值流量达 800Gbps&#xff0c;核心交易…

JSON 编辑器:从语法到数据处理(二)

JSON 编辑器&#xff1a;从语法编写到结构可视化&#xff08;一&#xff09;-CSDN博客 在上一篇中&#xff0c;我们了解了 JSON 的语法和编辑器&#xff0c;解决了 “怎么写对 JSON” 的问题。 而实际开发中&#xff0c;更关键的是 “怎么高效处理 JSON 数据” —— 如何从商品…

按键开关的结构、功能与环保安全?

工业控制的核心触手&#xff1a;深度解析按键开关的结构、功能与环保安全 一、 结构基石&#xff1a;双触点转换机制 按键开关的核心在于其精妙的触点系统。绝大多数按键开关都配备有两对独立的触点&#xff0c;这是实现复杂控制逻辑的基础。每一对触点并非随意组合&#xff…

BigDetection:改进目标检测器预训练的大规模基准之论文阅读

摘要 近年来,多个数据集和开放挑战已被引入用于目标检测研究。为了构建更通用且强大 的目标检测系统,本文提出了一个新的大规模基准数据集,称为 BigDetection。我们的目标是 整合现有数据集(LVIS、OpenImages 和 Object365)的训练数据,并遵循精心设计的原则,构建一个更…

Linux系统移植⑨:uboot启动流程详解-bootz启动Linux过程

Linux系统移植⑨&#xff1a;uboot启动流程详解-bootz启动Linux过程 bootz 是 U-Boot 中用于启动 Linux 内核的命令&#xff0c;专为处理 zImage&#xff08;压缩内核映像&#xff09; 设计。 启动 Linux 的完整过程&#xff1a; 1. 加载内核与相关文件 U-Boot 先将以下文件…

【R】基于R实现贝叶斯分析(一)

文章目录 贝叶斯简介Why R理论基础一、三种先验分布和对应后验的计算1. 离散先验2.Beta先验&#xff08;共轭先验&#xff09;3. 直方图先验 二. 后验抽样1. 网格点采样法2. 其他方法 三、贝叶斯推断1. 参数估计(1) 后验均值(2) 后验方差(3) 后验区间 2. 假设检验3. 预测(1) 先…

论文略读:Personality Alignment of Large Language Models

ICLR 2025 558 当前的大语言模型&#xff08;LLMs&#xff09;在对齐时&#xff0c;通常旨在反映普遍的人类价值观与行为模式&#xff0c;但却常常无法捕捉到个体用户的独特特征与偏好。 为填补这一空白&#xff0c;本文提出了**“人格对齐&#xff08;Personality Alignment&…

JSON与XML怎么选?什么情况下会用到 JSON?

一、JSON 与 XML 的核心区别 从 语法、性能、适用场景 等维度对比&#xff0c;核心差异如下&#xff1a; 对比维度JSONXML语法结构键值对格式&#xff08;如 {"name": "无线耳机"}&#xff09;&#xff0c;无标签&#xff0c;结构紧凑。标签嵌套格式&…