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

devtools/2024/11/23 20:04:31/

# 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/devtools/136370.html

相关文章

ubuntu 安装 yum 无法定位问题

前言&#xff1a;yum安装方法其实很简单&#xff0c;知识使用apt install yum 即可&#xff0c;但是会遇到了各种问题&#xff0c;报‘E: 无法定位软件包 yum’&#xff0c;apt下载源问题。 1.问题 系统&#xff1a;ubuntu22.04 yum报错&#xff1a;E: 无法定位软件包 yum …

【Vue】设置el-tabs,el-tab-pane字体颜色大小

前言 好久不见&#xff01;真的是很久很久啦&#xff01;本来开了个新专栏&#xff08;收费的&#xff0c;又穷了我&#xff0c;好想赚钱啊&#xff09;可是又忙又懒&#xff0c;写了好几篇草稿&#xff0c;但是都不满意&#xff0c;导致一直没发&#xff0c;最近很忙&#xff…

融入模糊规则的宽度神经网络结构

文章目录 论文概述创新点及贡献 算法流程讲解核心代码复现main.py文件FBLS.py文件 使用方法测试结果示例&#xff1a;使用公开数据集进行本地训练准备数据 定义数据转换&#xff08;预处理&#xff09;下载并加载训练数据集下载并加载测试数据集将每张图片展平并检查加载的数据…

设计模式:6、装饰模式(包装器)

目录 0、定义 1、装饰模式包含的四种角色 2、装饰模式的UML类图 3、示例代码 0、定义 动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。 1、装饰模式包含的四种角色 抽象组件&#xff08;Component&#xff09;&#xff1a;抽象组件是一个抽象…

设计模式之 责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在将多个处理对象通过链式结构连接起来&#xff0c;形成一条处理请求的链条。每个处理对象都有机会处理请求&#xff0c;或者将请求传递给链中的下一个对象。这样&#x…

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…

Pytorch使用手册-Tensors(专题二)

这段代码是对 PyTorch 中张量(Tensors)的详细介绍和操作演示。以下是逐步讲解: 1. 什么是张量 (Tensor) 张量是一种专门的数据结构,与 NumPy 的多维数组(ndarray)类似: 它可以在 GPU 或其他硬件加速器上运行。张量可以与 NumPy 共享内存,避免不必要的数据拷贝。它是为…

基于 DRNN 神经网络整定的 PID 解耦控制

1. 基本原理 DRNN&#xff08;Dynamic Recurrent Neural Network, 动态递归神经网络&#xff09;是一种带有时间反馈的神经网络&#xff0c;能够建模系统的动态特性&#xff0c;适用于非线性、多变量、时变系统的控制。结合 PID 解耦控制&#xff0c;利用 DRNN 进行动态建模和…