蓝桥杯算法双周赛心得——深秋的苹果(二分+贪心分组前缀和)

大家好,我是晴天学长,二分的check函数,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


1) .深秋的苹果

在这里插入图片描述

问题描述
当深秋的苹果树丰收时,村庄的居民们兴致勃勃地采摘着红彤彤的苹果。他们将采摘下来的N个苹果排成了一排,形成了-个苹果序列A,第i个苹果的甜度值为A; (1≤i≤N)。
现在村民需要将苹果序列划分为连续的M段,对于分割后的某一段Ar,定义其美味值表示为该段内不同下标的苹果的甜度两两相乘的总和.
注:如果某-段只有一个苹果,它的美味值为0。
请问应当如何给苹果分段,才能使得美味值最大的一段尽可能小,你只需要输出这个最大美味值可能的最小值即 可。
输入格式
第1行输入2个正整数N, M,分别为苹果序列的长度和需要分成的段数。
第2行输入N个空格隔开的正整数,表示苹果序列。
输出格式
输出仅1行,包含1个整数,表示管案。
样例输入
147258
样例输出
39
说明
我们可以把苹果序列分成[1,4,7,[2,5],[8],这样最大的一段美味值为39,是最小的分法。
评测数据规模
1≤M≤N≤20000。
1≤A;< 10000.


2) .算法思路

深秋的苹果(二分答案+前缀和)
1.接受数据,写一个前缀和数组,注意数据量有10的4次方
2.二分答案(右满足)最大的最小
3.判断是否能划分成M段(往后)
check 函数
ans+=
if j-1=-1, 就a[i]*sum[i]就好。

注意:
(1)如果以最大化分组都大于m,那只有一组最大化的时候,分的组数一定不会满足要求。
(2)当最大化分组数m小于等于M的时候,那一定能凑成M组。


3).算法步骤

1.使用前缀和将数组的值求和,预处理sum数组。

2.用二分查找法求出满足切分段数大于等于M的最小美味值下限l和上限r。

3.检查函数check中使用滑动窗口:

(1)left和right为窗口指针
(2)m记录当前段数
(3)ans记录当前窗口内所有元素和
(4)对右指针右移,计算加进来的元素贡献,同时维护ans是否超过mid
(5)每当ans超过mid,将left右移一位,ans清零。
(6)m加1。
(7)最后返回m是否小于等于M
(8)每次二分将mid作为美味值后,根据check函数结果决定收缩查找范围。

4.重复直到l=r时找到满足条件的最小美味值下限。


4). 代码实例

package LanQiaoTest.二分;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class 深秋的苹果 {
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static String s;
    static String[] sArray;
    static long[] sum;
    static int[] a;


    public static void main(String[] args) throws IOException {
        s = in.readLine();
        sArray = s.split(" ");
        int N = Integer.parseInt(sArray[0]);
        int M = Integer.parseInt(sArray[1]);


        s = in.readLine();
        sArray = s.split(" ");
        sum = new long[N];
        a = new int[N];
        //接受数据并前缀和
        for (int i = 0; i < sArray.length; i++) {
            a[i] = Integer.parseInt(sArray[i]);
            if (i == 0) {
                sum[i] = a[i];
                ;
            } else {
                sum[i] = sum[i - 1] + a[i];
            }
        }
        //二分答案
        System.out.println(mid(0L, (long) 4e18, sum, a, M));
    }


    private static long mid(long l, long r, long[] sum, int[] a, int M) {
        while (l < r) {
            long mid = (r - l) / 2 + l;
            if (check(sum, a, mid, M)) {
                l = mid + 1;
            } else {
                r = mid;
            }
        }
        return l;
    }
    //如果能以mid的值分成m组,那一定能以mid+1分成m组。

    private static boolean check(long[] sum, int[] a, long mid, int M) {
        //以美味值mid分成M段
        int m = 0;
        int left = 0;
        long ans = 0;
        //滑动窗口
        for (int right = 1; right < a.length; right++) {
            if (left == 0) {
                ans += ((long) a[right] * (sum[right] - a[right]));
            } else {
                ans += ((long) a[right] * (sum[right] - sum[left - 1] - a[right]));
            }

            while (ans > mid) {
                left = right;
                m++;
                ans = 0;
            }
        }
        //算上最后的那个组,不管是有没有满足mid,还是一个数(一个数的值是0)
        m++;
        //如果以最大化分组都大于m,那只有一组最大化的时候,分的组数一定不会满足要求
        //当最大化分组数m小于等于M的时候,那一定能凑成M组。
        return m > M;
    }

}


4).总结

  • 二分的正确写法。
  • check函数的书写。

试题链接:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QGIS之二十一栅格数据重投影坐标系

效果 步骤 1、准备数据 2、栅格重投影 Qgis工具箱中搜索“投影” 指定重投影坐标系&#xff0c;例如EPSG&#xff1a;3857 运行 3、结果 查看属性

栈:括号匹配问题!

目录 题目&#xff1a; 思路分析&#xff1a; 解题思路&#xff1a; 一、配对&#xff1a; 二、数量问题&#xff1a; 三、细节问题&#xff1a; 完整代码&#xff1a; 手撕栈&#xff1a; 题目&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&…

【python】Django——连接mysql数据库

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——连接mysql数据库 连接MySQL数据库…

Git本地项目提交到Gitee的操作流程

一、Gitee创建一个仓库 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a;复制该仓库地址&#xff08;https://gitee.com/yassels/test_1115.git&#xff09;&#xff0c;留待后续使用 二、操作本地文件上传到Gitee 第一步&#xff1a; 第二步…

Dreamweaver替代方案!免费开源网页开发工具推荐,超实用不容错过!

虽然Adobedreamweaver非常好用&#xff0c;但它并不是唯一一个可以设计、开发和发布精彩网站的Web开发集成环境。在我们的开源世界里&#xff0c;有许多优秀的Web开发工具&#xff0c;可以完全取代dreamweaver的各种功能&#xff0c;更重要的是&#xff0c;它们是免费的。如果您…

找不同游戏-第15届蓝桥第二次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第157讲。 第15届蓝桥杯第2次STEMA测评已于2023年10月29日落下帷幕&#xff0c;编程题一共有6题&#xff0c;分别如下&…

JavaWeb-HTML

​ 一、什么是HTML HTML是hypertext markup language&#xff08;超文本标记语言&#xff09;的缩写。HTML文件本质上是文本文件&#xff0c;普通的文本文件只能显示字符&#xff0c;而HTML文件可以在浏览器上显示更丰富的信息&#xff08;如图片等&#xff09;。 超文本&am…

Go语言fyne开发桌面应用程序-环境安装

环境安装 参考https://developer.fyne.io/started/#prerequisites网站 之前的文章介绍了如何安装GO语言这里不在叙述 msys2 首先安装msys2&#xff0c;https://www.msys2.org/ 开始菜单打开MSYS2 执行 $ pacman -Syu$ pacman -S git mingw-w64-x86_64-toolchain注意&#…

企业大文件传输的四大误区:你还在用传统的FTP和网盘吗?

在当前数字化时代&#xff0c;数据已经成为企业的核心资产&#xff0c;而文件传输则是数据流动的重要方式。企业需要高效、安全、稳定地传输各种类型和规模的文件&#xff0c;无论是内部协作还是外部交付。然而&#xff0c;很多企业在文件传输方面存在一些误区&#xff0c;导致…

Python交易-通过Financial Modeling Prep (FMP)选择行业

介绍 在您的交易旅程中,无论您是在寻找理想的股票、板块还是指标,做出明智的决策对于您的成功至关重要。然而,收集和分析所需的大量数据可能相当艰巨。财务建模准备 (FMP) API的

jenkins+centos7上传发布net6+gitlab

工作中实践了一下jenkins的操作&#xff0c;所以记录一下这次经验 首先安装好jenkins并注册自己的jenkins账号 因为我们的项目代码管理使用的是gitlab&#xff0c;在开始之前先在jenkins上安装gitlab的插件&#xff0c;安装之后应该是要重启jenkins的服务&#xff0c;后续jen…

无线终端掉线问题专题

一、终端连接过程 1、通过beacon或者probe帧发现设备 2、accoc和auth过程 3、EAP过程 4、DHCP过程 5、portal过程 6、终端检测wlan是否可以上网 7、正常接入网络 二、终端无法上网 终端无法上网则说明终端在连接过程中某一个环节除了问题 1、发现AP过程&#xff0c;p…

【论文精读2】R-MVSNet

R-MVSNet【递归多视图立体网络】&#xff0c;论文全名&#xff1a;“Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference”&#xff0c;CVPR 2019(CCF A) 在MVSNet的基础上做了一些改进&#xff0c;主要解决的问题是代价体正则化&#xff08;Cost Volume…

Mysql执行报错:[Err] 1292 - Truncated incorrect DOUBLE value:***

MySQL执行语句抛出异常&#xff1a; 上面错误提示概是下面几种情况&#xff1a; 数据类型不匹配&#xff1a;在进行数值比较或运算时&#xff0c;数据类型可能不匹配。例如&#xff0c;将一个字符串值与一个 DOUBLE 类型的列进行比较或运算&#xff0c;或者将一个非数字字符串…

Android设计模式--策略模式

每天都要完成一个小目标 一&#xff0c;定义 策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化 什么意思呢&#xff1f;在我们平时的开发中&#xff0c;难免会遇到这种情况&…

【eNSP安装与使用】华为eNSP网络设备模拟器从安装到使用详细步骤(亲测有效,附安装包下载)

目录 写在前面涉及知识一、安装那些事1.1前期安装包准备&#xff08;基于windows10环境测试&#xff09;1.2 安装WinPcap1.3 安装Wireshark1.4 安装VirtualBox1.5 安装eNSP 二、使用那些事2.1 安装问题解决&#xff08;启动设备ar1失败 错误代码41&#xff09;2.2 测试使用 三、…

干货分享---- 金融贷款电销获客的方法、渠道

电话营销的现状是&#xff0c;它过去使用电话资源在常规交易平台上正常工作&#xff0c;但进入时&#xff0c;对方总是挂断电话&#xff0c;甚至被他人标记为骚扰&#xff0c;这使工作变得困难。事实上&#xff0c;电话营销交易量飙升的关键很简单&#xff0c;那就是营销技巧和…

AGI+机器人行业:AGI 赋能人形机器人,具身智能时代有望加速到来

目录 1AGI的关键拼图&#xff1a;起于大模型&#xff0c;终于具身智能 .2 具身智能助力AGI走进现实 3人形机器人是AGI最佳载体&#xff0c;业界研究进展加速 2.2 OpenAI升级迭代GPT&#xff0c;推动机器人“大脑”升级 2.3 Meta与CMU联手打造RoboAgent&#xff0c;用更少的…

【开源】基于JAVA的生活废品回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

网上赚钱有哪些项目可以长期做?盘点六个靠谱的副业项目

很多想扩宽收入来源&#xff0c;或者准备从事网络副业项目的人来说&#xff0c;在网上找到一个靠谱的项目也并非易事。现在的网络时代&#xff0c;网上赚钱成了一个备受关注的话题。但是现在却到处充斥着金钱和骗局的诱惑&#xff0c;不谨慎的朋友很容易被骗踩坑。 那么&#x…