求数组(连续)在某一区间最大值(简单的动态规划的思想)

AI驱动的数据完整性:ECC到S/4HANA迁移 在SAP ECC到S/4HANA的迁移过程中,数据完整性验证是最复杂且关键的挑战之一。本文介绍了一个全面的AI驱动的端到端数据完整性框架,用于对账事务数据并验证数百万条主数据记录和事务记录的完整性。该框架结合了模式映射、自然语言提示到SQL生成、基于LLM的解决方案、大规模数据对账的数据完整性工具、基于云的测试数据管理以及实时Power BI仪表板,为开发者提供了一个可重复、可扩展的工作流程,确保ERP迁移过程中的数据质量。 阅读详情

举个例子:9  -18 3 2 7 1在求这串维数组(连续)区间的最大值的时候,最开始的想法就是暴力,把每个区间的数都加在一起,然后再比较出最大的数,这种方法虽然可以做出来,但是太浪费时间了,所以就有了一个比较简单的想法动态规划的思想。先整一段代码瞅瞅:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main(){
    int n;
    int a[100];
    while(~scanf("%d", &n)){
        int i, sum = 0;//sum用来记录某个区间的和
        for(i = 0; i < n; i++){
            cin>>a[i];
        }
        int max1 = 0;//如果区间全为负的情况下,使max1 = -999999,因为当全为负的情况下
        //更新的结果是最大的负数
        for(i = 0; i < n; i++){
            sum += a[i];
            max1 = max(sum, max1);//max1进行更新最大值,用max1来记录该点出现过的最大值。
            if(sum < 0)sum = 0;//如果该位置小于0的话,那就重新开始,
            //这个语句最好放在句尾,如果全为负,这么才能更新到最大的负数

        }
        cout<<max1<<endl;
    }
return 0;
}
//9  -18 3 2 7 1
//最快开始max1 = 0,然后sum = 9 > 0 max1 更新为 9
//sum = -9 < 0,sum 设置为0,max1不进行更新还是 9;
//sum= 3 > 0, sum < max1,max1不进行更新还是 9;
//sum =  5 > 0, sum < max1; max1不进行更新还是 9;
//sum = 12 > 0; sum > max1; max1进行更新更新为 12;
//sum = 13 > 0; sum > max1; max1进行更新更新为 13;
//最后输出max1,max1就是区间最大值

动态规划的思想就是从头开始累加,如果结果小于0,就把记录累加结果的值置为0,与此同时用一个数记录出现的最大结果,这个就是动态规划的思想了。下面是一道例题:

Problem 2253 Salty Fish

链接:http://acm.fzu.edu.cn/problem.php?pid=2253

这题就是咸鱼翻身,意思就是在某一区间对区间是0的数给翻过来,只能一次,求出最后有几条咸鱼翻身。

这题的想法就是先统计出有多少条鱼已经翻身了,然后把1置为-1,把0置为1,求出这个数组区间的最大值,也就是之前讲的思想,加上之前的和,就是结果。为什么这么做就可以了,因为你想把0置为1,但是你之前有的1,你是不想动的,但是你只要动了,你最原始的1,就相当于减少了,所以是-1,0置为1,相当于之前的数增加了。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int a[100001], b[100001];
int main(){
    int n, i;
    while(~scanf("%d", &n)){
        int sum = 0;
        for(i = 0; i < n; i++){
                scanf("%d", &a[i]);
                if(a[i] == 1)b[i] = -1;
                else b[i] = 1;
                sum += a[i];
        }
        if(sum == n)
        {
        printf("%d\n",n-1);
        continue;
        }//至少翻转一条鱼,所以当全为1的时候总数减1
        int max1 = 0, c = 0;
        for(i = 0; i < n; i++){//连续区间求最大的值;
            c += b[i];
            if(c < 0)c = 0;
            max1 = max(c, max1);
        }

        printf("%d\n",max1+sum);


    }
return 0;
}

 

数据处理和分析之数据聚类:层次聚类(Hierarchical Clustering):单链接层次聚类方法 单链接层次聚类(Single-Linkage Hierarchical Clustering)是凝聚型层次聚类的一种,它基于数据点之间的最小距离来定义聚类间的相似性。在单链接层次聚类中,两个聚类之间的距离定义为这两个聚类中任意两个数据点之间的最短距离。这种聚类方法倾向于形成链状或线性的聚类,因为聚类的边界是由最远的数据点决定的,而不是聚类的平均或中心位置。单链接层次聚类通过计算簇间最近点的距离来决定簇的合并,这种方法简单直观,但可能导致簇的形状不规则,尤其是在数据点分布不均匀的情况下。 阅读详情

相关推荐

HC32F460 FPU实战:从零开启硬件浮点加速

本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。

weixin_42620340的博客 348

[编程题]区间中的最大值

题目: 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值: [6] = 6 * 6 = 36; [2] = 2 * 2 = 4; [1] = 1 * 1 = 1; [6,2] = 2 * 8 = 16; [2,1] = 1 * 3 = 3; [6, 2, 1] = 1 * 9 = 9; 从上述

Vergesson 2655

QEMU+KVM实战:5分钟搞定Ubuntu 24.04虚拟机搭建(附性能优化技巧)

本文详细介绍了在Linux宿主机上使用QEMU和KVM快速搭建Ubuntu 24.04虚拟机的完整实战流程。内容涵盖从环境准备、核心组件解析到具体的安装命令,并重点分享了针对CPU、内存、存储I/O及网络性能的深度优化技巧,旨在帮助用户构建一个响应迅速、资源隔离良好的高性能虚拟化开发与测试环境。

j2k3l4的博客 753

动态规划——区间dp

区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的最优解进而得出整个大区间上最优解的dp算法。区间dp主要运用了分治的思想,将大问题差分成一个个小问题求解,最终将得到全局最优解。

qq_57150526的博客 1647

STM32F407实现LwIP的MQTT客户端并连接到服务器

这个是用LwIP协议栈中自带的MQTT客户端API写成的,代码注释很详细,附带有服务端的展示。LwIP版本是2.1.2.

wait_for_STM32的博客 6394

RexUniNLU零样本通用自然语言理解:nlp_deberta_rex-uninlu_chinese-base模型实战解析

本文深入解析了RexUniNLU零样本通用自然语言理解模型(nlp_deberta_rex-uninlu_chinese-base)的实战应用。通过详细的环境配置、模型加载及实战案例,展示了该模型在零样本场景下的强大能力,如实体识别和复杂关系抽取,显著提升NLP任务效率。

weixin_29088655的博客 250

动态规划求区间最值问题RMQ(Range Minimum/Maximum Query)

求区间最值问题最简单的方法是遍历区间,时间复杂度O(n), 但是当查询次数很多的时候,时间效率并不高。可以用线段树把算法优化到O(logn) (在线段树中保存线段的最值),不过sparse_table算法是较好的,用O(nlogn)的时间进行预处理,然后用O(1)时间进行查询。预处理:预处理使用DP的思想,f(i, j)表示[i, i+2^j - 1]区间中的最小值,我们可以开辟一个数组专门来保存...

weixin_30293135的博客 192

OpenCV-Python实战(3)——OpenCV中绘制图形与文本

OpenCV 是一个的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。本文介绍了 OpenCV 提供的与绘制图形和文本相关的函数。在图形方面,我们了解了如何绘制基本图形(直线、矩形和圆形等)以及高级图形(剪裁线、箭头、椭圆和多边形)。在文本方面,我们了解了如何绘制文本以及 OpenCV 库中的所有可用字体。

盼小辉丶的博客 2万+

C++ 算法篇 动态规划----区间动态规划

区间动态规划的含义与模板解释 区间DP,其实求的就是一个区间内的最优值. 一般这种题目,在设置状态的时候,都可以设f[i][j]为区间i-j的最优值 而f[i][j]的最优值,这有两个小区间合并而来的,为了划分这两个更小的区间,我们则需用用一个循环变量k来枚举,而一般的状态转移方程便是: f[i][j] = max/min (f[i][j] , f[i][k] + f[k][j] + something) 我们则需要根据这个题目的实际含义进行变通即可. 而区间dp的大致模板是: for (..

流年的博客 2539

SAP Joule 经过了超过 2.5 亿行 ABAP 代码的训练之后......

披露的统计数据,Joule 提供的这种全新系统交互方式,可将事务性任务执行速度提高 90%,访问 SAP Help Portal 内容的速度提高 95%。在 ABAP 应用开发领域,SAP 官网数据显示,Joule 经过超过 2.5 亿行 ABAP 代码的训练,有信心成为这一领域行业领先的代码助手。刚刚过去的 SAP 蓝宝石大会上,SAP 提到,从2023年第四季度以来,SAP 已经交付了 50 项基于人工智能的创新。让其生成 SAP 应用能够识别的结构化应用数据,业务用户全程无需离开 SAP 应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 791

YOLOv12创新改进 | 全网独家创新篇、小目标检测改进 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLOv12有效涨点

本文提出了HS-FPN(高频和空间感知特征金字塔网络),通过HFP(高频感知)模块增强小目标特征,SDP(空间依赖感知)模块捕获像素间空间依赖关系。实验在AI-TOD等小目标数据集上验证了该方法的有效性,相比FPN显著提升检测性能。文章详细介绍了HS-FPN的网络结构、核心代码实现及在YOLOv12中的应用方法,并提供多种改进版本的yaml配置文件,为小目标检测任务提供了有效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 336

11、 函数的应用 用函数实现,求数组a中元素最大值

【代码】11、 函数的应用 用函数实现,求数组a中元素最大值。

m0_74282485的博客 578

深入浅出之ADown降采样模块(YOLO)

YOLOv9中的ADown模块是一种用于目标检测任务中的下采样操作的卷积块。在深度学习模型中,下采样(downsampling)是减少特征图空间维度的常用技术,它有助于模型在更高层次上捕捉图像的特征,同时减少计算量。ADown模块的设计旨在以一种高效且对性能影响较小的方式进行这一操作。

浩瀚之水的专栏 4169

【动态规划】子数组系列一(数组中连续的一段)

【动态规划】子数组系列一(数组中连续的一段)

fight_p的博客 2142

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目|2331

给你一个下标从 0 开始只包含 正 整数的数组 nums 。 一开始,你可以将数组中 任意数量 元素增加 至多 1 。 修改后,你可以从最终数组中选择 一个或者更多 元素,并确保这些元素升序排序后是 连续 的。比方说,[3, 4, 5] 是连续的,但是 [3, 4, 6] 和 [1, 1, 2, 3] 不是连续的。 请你返回 最多 可以选出的元素数目。

闻缺陷则喜何志丹 735

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

动态规划Ⅲ:数组区间

文章目录三、数组区间1. 数组区间和2. 等差数列划分3. 子数组最大和 三、数组区间 1. 数组区间和 数组区间和:给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。LeetCode 直达 如果直接用暴力循环,时间开销是很大的,用动态规划的思路,建立 dp 数组,数组每个位置上是 当前位置的状态,即 从数组开始到当前位置所有元素的和。对于给定区间 [i,j],将求和问题转换为 res = dp[j] - dp[i-1],在具体的代码实现中

学习 & 分享 ~ 2155

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

连续子数组最大值

题目链接: https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey C连续子数组最大值基本思想代码总结 基本思想 使用动态规划解决。用一个数组dp,其中dp[i]

qq_42211773的博客 423

编程题-最大子数组和(中等-重点【贪心、动态规划、分治思想的应用】)

​ 笔者小记: 1、动态规划与分治法和贪心法类似,都是将问题分解为更小的子问题,并通过求解子问题来得到全局最优解。然而,它们在处理子问题的方式上有所不同: 贪心法‌:当前选择依赖于已经作出的所有选择,但不依赖于有待于做出的选择和子问题。它自顶向下,一步一步地作出贪心选择。 ‌分治法‌:各个子问题是独立的,一旦递归地求出各子问题的解后,自下而上地将子问题的解合并成问题的解。 ‌动态规划‌:允许子问题不独立,通过自身子问题的解作出选择,对每一个子问题只解一次,并将结果保存起来,避免每

qq_43287713的博客 1271

求一个数组的连续子数组的最大值(以及区间)

求一个数组的连续子数组的最大值(以及区间) package suanfa.impover; /** * 求一个数组的连续子数组的最大值(以及区间) */ import java.util.Arrays; public class SubArrayMaxSum { // 暴力破解,O(n2) public static void fun1(int [] a) { System....

qq_40728028的博客 1092

求数组的区间和

问题描述 就是输入n 然后输入n个数 下标为1~n 然后查询 查询次数不知道 但是以0 0 作为结束的标志 查询为l r 就是输出[l,r]区间的和 //这事朴素的求数组区间和的问题 import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner input=new

执念 1307

区间动态规划

区间动态规划是一种解决区间问题的强大工具,它通过将大区间划分为小区间,逐步解决问题。常见的区间DP问题包括石子合并、矩阵连乘和回文串分割等。在实际应用中,理解问题的区间结构、合理定义状态和状态转移方程是解决区间DP问题的关键。通过不断练习和思考,你会发现区间DP在许多复杂问题中都能发挥作用,并且能有效提升你的算法设计能力。

缪语博的博客 1430

算法双璧:如何用动态规划征服连续数列,用双指针锁定无序区间?

给定整数数组。

司徒鸿的博客 2112

LeetCode连续子数组的最大和 动态规划

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 (1 <= arr.length <= 10^5,-100 <= arr[i] <= 100) 思路1:记录前缀和思想求一段连续的子数组的最大值,即任意区间【i,j】和的最大值,可以先记录前缀和。用sum[

qq_42795064的博客 498

【Leetcode 410】分割数组的最大值 —— 动态规划

我们可以使用**动态规划**解决本题,解题思路:1. 状态定义:`f[i][j]` 表示将数组的前 i 个数分割为 j 段所能得到的最大连续子数组和的最小值;`sub(i,j)`表示数组 `nums`中下标落在区间`[i,j]`内的数的和 2. 状态转移方程:枚举 x,其中前 x 个数被分割为 j−1 段,而第 x+1 到第 i 个数为第 j 段

若明天不见 1479

动态规划:连续子数组的最大和

题目(来源) 给一个数组,返回它的最大连续子序列的和及其开始下标和结束下标。例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8,从第0个开始,到第3个为止。 动态规划 public void FindGreatestSumOfSubArray(int[] array) { int preValue=0; int max=Integer.MIN_V...

GD_Hacker的博客 733

数组的最长连续的序列

问题:给一个包含数字的数组,求该数组的最长的子数组(这里说的子数组是下标连续),要求这个子数组中的数组是一个连续的序列(不需要排好序)。例如,给一个数组[4; 5; 1; 5; 7; 6; 8; 4; 1],最长的满足条件的子数组是[5; 7; 6; 8; 4]。因为该子数组中,5; 7; 6; 8; 4是一个连续的序列。 思路: 可以使用动态规划,满足条件的子序列,首先子序列中不能有重复出现

Cindy_zhong的专栏 954
上一篇: KMP算法简单总结
下一篇: BFS(广度优先搜索)简单例题(一)
Re:fused
博客等级 码龄9年 474粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值