算法与数据结构高手养成:朴素的贪心法(下)二分答案

news2024/10/4 22:23:09


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:算法与数据结构高手养成

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​​

​​

目录

算法与数据结构高手养成:朴素的贪心法(下)二分答案

例:数列分段

思路1:最优化策略

思路2:构造法

思路3:逆向思考

思路3的局限性

用二分法降低验证次数

用二分法降低验证次数:例

代码:数列分段

二分答案法的一般步骒

适用二分答案法的问题特性

不符合单调性的例子


算法与数据结构高手养成:朴素的贪心法(下)二分答案

二分答案——通过答 案反推,验证合法性从而确定最优解

例:数列分段

给出一个长度为 N 的正整数数列,现在要把它分成段,且每一段里所有数字的和都不超过T,问T的最小值是多少?

例:2354332,分成3段

T最小的分段:[23] [54] [332],T=9(5+4)

思路1:最优化策略

阶段:当前分割到第几段

决策:在哪个位置分割

怎么确定最优子结构?

  • 最优 =最大/最小?

如果一直选取最优,每段尽可能小,会导致分到最后剩下的太多~!

  • 最优=最接近某个值(比如“数字和:段数”)?

这样也不是最优~

所以最优化策略还是不行

思路2:构造法

此题看起来很接近划分问题?

构造法的条件:可以通过计算或者总结得出规律

但这道题没什么规律..

思路3:逆向思考

已知 T,很容易验证数列是否能被分为M段,且每段和都不超过 T

  • 设置一个足够小的 作为起始值,可以是理想情况的下界
  • 验证对于当前的T是否可以满足条件(分成M段,每段和小于等于 T)
  • 若不满足则T=T+1,直到找到最小的满足条件的 T

思路3的局限性

如果数列中有个很大的数,则我们的初始T就需要一直加,需要做很多重复工作~

此时我们可以使用二分法

用二分法降低验证次数

给答案规定一个上下界,作为二分起始区间。本题中,T的下界是(数列和÷段数),上界是所有数字的和

对当前区间求中值mid,并用贪心法进行验证

如果每段和都不超过mid时,可以划分为不多于M段,则答案在左半区间;如果划分的段数大于M,或者有数字大于mid导致不能完成划分,则答案在右半区间

用二分法降低验证次数:例

 

发现18取大了,所以往左半区间继续求mid值

 此时,说明最优解在9-13之间

此时发现它最少只能分四段了,说明最优解是11

代码:数列分段

#include<bits/stdc++.h>
using namespace std;

int n, m;
int a[100001];

int segmentation(int ub) {
    int count = 0, res = 0;
    for (int i = 0; i < n; i++) {
        if (a[i] > ub)
            return INT_MAX;
        if (count + a[i] <= ub)
            count += a[i];
        else {
            count = a[i];
            res += 1;
            if (res > m)
                break;
        }
    }
    return res + 1;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n >> m;
    long long sum = 0;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        sum += a[i];
    }
    
    int l = sum / n, r = 1000000000;
    if (sum < r)
        r = sum;
    while (l < r) {
        int t = (l + r) / 2;
        if (segmentation(t) <= m)
            r = t;
        else
            l = t + 1;
    }

    cout << l << endl;
    return 0;
}

二分答案法的一般步骒

1.确定解的范围,也就是进行二分的上下边界

2.对这个解的范围进行二分查找,每一轮二分,对于当前的中值利用贪心进行验证,如果验证通过则说明解的范围需要缩小,否则需要扩大

3.当二分结束,确定了最小/最大的通过验证的解,就是最终答案

适用二分答案法的问题特性

题目所求的最优解,往往是某种上下界,比如数列划分为M段后每段的和的最大值T,就是一种上界

如果给定了一个值,可以很容易地用贪心法验证这个值是不是一个可行解

这个值和某个用来验证合法性的条件,一定存在某种单调性关系

不符合单调性的例子

将题目修改为:每段都至少包含一个数字 T,求 T的最大值

如果此时M=2,二分会先验证T=2再验证T=1,最后得到T最大是1,但实际上T最大是4

 ​​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

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

相关文章

Plotly的魔力:如何用Python创建令人惊叹的图表?

大家好&#xff0c;在数据分析和可视化领域&#xff0c;图表是不可或缺的工具。它们可以帮助我们更直观地理解数据趋势和模式。今天&#xff0c;我们要介绍的是一个强大的Python库——Plotly&#xff0c;它可以让你轻松创建交互式、漂亮的图表。无论你是数据科学家、分析师&…

计算机网络到底是指什么?

计算机网络是信息技术领域中最为核心和复杂的一部分&#xff0c;它涵盖了众多的技术原理和应用。下面&#xff0c;我们将从技术层面深入探讨计算机网络的相关内容。 一、计算机网络的分层模型 计算机网络的分层模型是网络通信的基石&#xff0c;它将网络通信过程划分为不同的层…

【ARM Cache 系列文章 2.1 -- Cache PoP 及 PoDP 介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 PoP 及 PoDPCache PoDPCache PoP应用和影响PoP 及 PoDP Cache PoDP 点对深度持久性(Point of Deep Persistence, PoDP)是内存系统中的一个点,在该点达到的任何写操作即使在系统供电…

【深度解析GPT-4o】:全面解析新一代AI技术的突破与优势

目录 ​编辑 1.版本对比&#xff1a;从GPT-3到GPT-4&#xff0c;再到GPT-4o的飞跃 1.1 模型规模的扩展 1.2 训练数据的更新 1.3 算法优化与效率提升 1.4 案例分析 2.技术能力&#xff1a;GPT-4o的核心优势 2.1 卓越的自然语言理解 2.1.1 上下文理解能力 2.1.2 语义分…

教师个人出书需要具备什么条件?

邮箱&#xff1a;2621542409qq.com&#xff08;qkfb88688-来稿备注独著&#xff09; 教师个人出书通常需要具备以下一些条件&#xff1a; 1. 内容价值&#xff1a;书稿内容要有一定的学术价值、教学经验分享价值或对教育领域有独特的见解和贡献。 2. 原创性&#xff1a;书稿必…

软件测试——Java自动化测试Selenium

目录 1.运行环境 2.环境配置 3.第一个浏览器程序 4.浏览器操作 5.元素定位 6.元素操作常用API 7.特殊元素定位与操作 8.元素三大等待 9.iframe操作 10.window操作 11.select选择框 12.js语句执行 13.鼠标操作 14.截图操作 1.运行环境 编译工具&#xff1a;IDEA …

智能工单系统(IT运维工单系统),为企业IT运维跨部门协作量身定制!

当企业规模扩大、业务日益复杂时&#xff0c;普通的it运维工单管理方法已无法满足企业的需求&#xff0c;可能变得难以胜任。正因如此&#xff0c;智能工单系统&#xff08;IT运维工单系统&#xff09;进入人们的视野中。因其可以大幅提高企业跨部门协作的效率和满意度&#xf…

java版MES系统全套源码,支持 SaaS 多租户,管理后台的 Vue3 版本采用 :vue-element-plus-admin

MES生产制造执行系统源码&#xff0c;有演示&#xff0c;自主研发&#xff0c;多个项目应用案例&#xff0c;成熟稳定。支持二次开发&#xff0c;商业授权后可商用。 MES系统是面向制造企业车间执行层的生产信息化管理系统&#xff0c;能实时监控生产过程、管理制造数据、优化生…

深度学习入门-第3章-神经网络

前面的待补充 3.6 手写数字识别 3.6.1 MNIST 数据集 本书提供了便利的 Python 脚本 mnist.py &#xff0c;该脚本支持从下载 MNIST 数据集到将这些数据转换成 NumPy 数组等处理&#xff08;mnist.py 在 dataset 目录下&#xff09;。 使用 mnist.py 时&#xff0c;当前目录必须…

2米量级高速风洞测量系统,智能装备与通信技术产业展览会(2024中国军民两用)

"2米量级高速风洞测量系统&#xff1a;规范化改进与未来展望" 在航空航天领域&#xff0c;风洞试验是评估飞行器设计性能的关键手段。为了满足日益增长的科研需求&#xff0c;对2米量级高速风洞测量系统的规范化改进变得尤为重要。本文将探讨该系统的改进措施及其在…

打开C# 大门:Hallo, World!

C# 介绍 C#&#xff08;C Sharp&#xff09;是一种面向对象的编程语言&#xff0c;由微软公司开发。它是 .NET Framework 的一部分&#xff0c;用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)

目录 排序一、插入排序1.直接插入排序2.折半插入排序3.希尔排序 二、交换排序1.快速排序2.冒泡排序 三、选择排序1. 简单选择排序2. 堆排序3. 树排序 四、归并排序(2-路归并排序)五、基数排序1. 桶排序&#xff08;适合元素关键字值集合并不大&#xff09;2. 基数排序基数排序的…

JAVA-学习

一、垃圾回收机制 1、为什么要进行垃圾回收机制 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收…

DS:数与二叉树的相关概念

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点…

阿里云镜像加速配置(工作中经常用到,写在此方便)

原因 由于运营商网络原因&#xff0c;会导致您拉取Docker Hub镜像变慢&#xff0c;甚至下载失败。为此&#xff0c;阿里云容器镜像服务ACR提供了官方的镜像加速器&#xff0c;从而加速官方镜像的下载。 获取镜像加速器地址 ACR会为每一个账号&#xff08;阿里云账号或RAM用户…

地球科学SCI期刊,中科院2区,IF=14.6,自引率低,无预警风险!

一、期刊名称 IEEE Geoscience and Remote Sensing Magazine 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;地球科学 影响因子&#xff1a;14.6 中科院分区&#xff1a;2区 三、期刊征稿范围 IEEE地球科学和遥感杂志向读者介绍IEEE GRS协会及其技术委员…

Unity打包Webgl端进行 全屏幕自适应

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一&#xff1a;修改 index.html二&#xff1a;将非移动端设备&#xff0c;canvas元素的宽度和高度会设置为100%。三&#xff1a;修改style.css总结 下载地址&#x…

SBOM是如何帮助医疗器械制造商提高产品透明度的?

SBOM&#xff08;软件物料清单&#xff09;通过以下方式帮助医疗器械制造商提高产品透明度&#xff1a; 1. 详细记录软件组成 SBOM详细列出了医疗器械所使用的所有软件组件、版本、作者、许可证信息等。这使得制造商能够清晰地了解产品的软件组成&#xff0c;包括每个组件的来…

蓝牙AOA定位专用温补晶振TG5032CFN

随着物联网&#xff08;IoT&#xff09;技术的迅猛发展&#xff0c;蓝牙AOA&#xff08;Angle of Arrival&#xff09;定位技术在智能家居、工业自动化、资产跟踪和健康监测等领域中得到了广泛应用。为了确保蓝牙AOA定位系统的高精度和稳定性&#xff0c;选择合适的时钟源至关重…

【智能AI相机】基于AI的新型成像和照明技术

缩短检测时间 降低废品率和成本 更快捕捉更多缺陷 ” Trevista CI Dome将康耐视专利的计算成像算法与结构化漫射圆顶照明相结合&#xff0c;提供无与伦比的地形图像质量&#xff0c;为光泽和哑光表面检测提供创新解决方案。有助于&#xff1a;缩短检测时间、降低废品率和成本…