【蓝桥杯备赛】深秋的苹果

embedded/2024/11/24 0:36:40/

# 4.1.1. 题目解析 

  1. 要求某个区间内的数字两两相乘的总和
  2. 想到前缀和,但是这题重点在于两两相乘
  3. 先硬算,找找规律:

比如要算这串数字的两两相乘的积之和:

1, 2, 3

= 1*2 + 1*3 + 2*3

= 1*(2+3) + 2*3

前缀和数组:

1 3 6

发现没有什么关系。。。

数字再长些:

1, 2, 3, 4

= 1*2 + 1*3 + 1*4 + 2*3 + 2*4 + 3*4

= 1*(2+3+4) + 2*(3+4) + 3*4

= 1*9 + 2*7 + 3*4

前缀和数组:

1, 3, 6, 10

好像还是没关系。。。

换种思路:

1, 2, 3, 4

= 1*2 + 1*3 + 1*4 + 2*3 + 2*4 + 3*4

= 1*4 + 2*4 + 3*4 + 2*3 + 1*3 + 1*2

= 4*(1+2+3) + 3*(1+2) + 2*1(倒过来看)

=4*6 + 3*3 + 2*1

1, 3, 6 正好是前缀和数组中的数字。

所以,规律就是:

区间内两两相乘的乘积,等于当前这个数这个数前一个位置的前缀和。


回归本题,说的是让每段区间的“美味值”最大的一段尽可能小,也就是说让每段里美味值都尽可能小,而且分的段数还不能超过 m。

暴力:算出来本段苹果的最大美味值,然后依次递减判断是否满足段数要求,直至不能再减小。

优化:使用“二分”进行搜索可能的美味值。

4.1.2. 代码


import java.util.Scanner;public class Main {static Scanner in = new Scanner(System.in);public static void main(String[] args) {int n = in.nextInt(), m = in.nextInt();int N = n + 10;int[] a = new int[N];for (int i = 1; i <= n; i++) {a[i] = in.nextInt();}// 1. 二分出模拟美味值long l = 1, r = (long) 4e18;while (l < r) {long mid = (l + r) >> 1;if (check(a, mid, m)) {r = mid;} else {l = mid + 1;}}// l就是最小美味值System.out.println(l);}private static boolean check(int[] a, long mid, int m) {// 1. 判断能否分为m段// 2. 判断每一段的美味值是否超过midint N = a.length;long[] s = new long[N];long val = 0;// 美味值long cnt = 1;// 段数for (int i = 1; i < N; i++) {// 计算当前位置的美味值(单独一个苹果美味值为0,前缀和0位不用初始化为1)val += a[i] * s[i - 1];// 计算前缀和s[i] = s[i - 1] + a[i];// 判断美味值if (val > mid) {// 大于选好的美味值,分段,并将美味值清零cnt++;val = 0;s[i] = a[i];} else {// 不大于选好的美味值,继续计算}if (cnt > m) {return false;}}return true;}
}

http://www.ppmy.cn/embedded/139985.html

相关文章

小说推文封面怎么用AI快速制作?

引言 在数字出版和社交媒体时代&#xff0c;一个吸引人的小说推文封面对于吸引读者至关重要。本文将详细介绍如何使用StartAI的文生图工具来制作小说推文封面&#xff0c;包括选择模型、lora和控制参数的步骤。 制作小说推文封面的步骤 1. 确定封面主题和风格 首先&#xf…

Unity 使用 Excel 进行配置管理(读Excel配置表、Excel转保存Txt 文本、读取保存的 Txt 文本配置内容)

Unity 使用 Excel 进行配置管理(读Excel配置表、Excel转保存Txt 文本、读取保存的 Txt 文本配置内容) 目录 Unity 使用 Excel 进行配置管理(读Excel配置表、Excel转保存Txt 文本、读取保存的 Txt 文本配置内容) 一、简单介绍 二、实现原理 三、注意事项 四、案例简单步…

k8s默认使用的后端网络模式

1. CNI简介 在 Kubernetes (K8s) 中,网络后端(CNI 插件)负责为集群中的容器提供网络连接。Kubernetes 默认并没有选择特定的 CNI 插件,而是允许用户根据需求选择使用不同的网络插件。 不过,Kubernetes 通过 kubeadm 或其他工具来初始化集群时,会使用某个默认的网络后端,…

5G轻量级核心网解决方案

随着5G技术的快速发展&#xff0c;各行业对网络能力的需求不断增加&#xff0c;传统的5G核心网&#xff08;5GC&#xff09;解决方案由于其高昂的部署和运营成本&#xff0c;常常成为企业面临的一个重大挑战。为了解决这一问题&#xff0c;5G轻量级核心网解决方案应运而生&…

ftdi_sio应用学习笔记 4 - I2C

目录 1. 查找设备 2. 打开设备 3. 写数据 4. 读数据 5. 设置频率 6 验证 6.1 遍历设备 6.2 开关设备 6.3 读写测试 I2C设备最多有6个&#xff08;FT232H&#xff09;&#xff0c;其他为2个。和之前的设备一样&#xff0c;定义个I2C结构体记录找到的设备。 #define FT…

构建nginx1.26.1轻量级Docker镜像添加第三方模块nginx_upstream_check_module

文章目录 1.构建自定义nginx镜像原因2.准备构建文件3.构建镜像4.验证第三方模块是否加载成功 1.构建自定义nginx镜像原因 docker hub仓库里的nginx官方镜像太大了&#xff0c;足足188MB不能重新引入nginx内部模块 并且也 不能静态方式 添加nginx的第三方模块。因为此过程需要涉…

el-table表头前几列固定,后面几列根据接口返回的值不同展示不同

在使用 Element UI 的 el-table 组件时&#xff0c;如果想要实现表头的前几列固定&#xff0c;而后面的列根据接口返回的数据动态展示&#xff0c;可以通过以下步骤来实现&#xff1a; 1. 固定表头前几列 在 el-table-column 中使用 fixed 属性来固定表头的前几列。例如&…

深度学习之目标检测的技巧汇总

1 Data Augmentation 介绍一篇发表在Big Data上的数据增强相关的文献综述。 Introduction 数据增强与过拟合 验证是否过拟合的方法&#xff1a;画出loss曲线&#xff0c;如果训练集loss持续减小但是验证集loss增大&#xff0c;就说明是过拟合了。 数据增强目的 通过数据增强…