| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 二分答案+贪心 -> 正文阅读 |
|
[数据结构与算法]二分答案+贪心 |
题意: 要求每段连续,且每段和的最大值最小。 关于最大值最小: 将其如下分段: [4 2][4 5][1] 第一段和为 6,第 2 段和为 9,第 3 段和为 1,和最大值为 9。 将其如下分段: 第一段和为 4,第 2 段和为 6,第 3 段和为 6,和最大值为 6。 并且无论如何分段,最大值不会小于 6。 所以可以得到要将数列 4 2 4 5 1 要分成 3 段,每段和的最大值最小为 6。 输入N,M和数列A,解出分配方式是最大值最小 分析: 二分答案由“二分”和“答案”组成。宏观上,二分,是对问题状态空间的一种遍历方式,主要作用是降低时间复杂度;答案,即枚举答案,则是一种解题方法,主要作用是化求解为判定,降低难度。 答案:在此题中,我们首先要确定答案的范围。显然,答案最小可能是数列中的最大值(记为 l ),最大可能是所有数的和(记为 r)。其次,我们发现,给出一个解,判定这个解是否合法,在此题中显得简单。这启示我们用枚举答案再判定的方法解决此题。 二分:二分建立在答案的基础上。此题中答案的排布,是有一定规律的,即,存在一个分界点 p,使得 [l,p)中的数都是非法解,[p,r]中的数都是可行解。而 p 即为所求的最小解。这种性质启示我们用一种特定的方法来枚举答案,于是有了二分。 代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:46:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |