题解:数学考试(动态规划、前缀和)

IAR下载Linux环境适配:入门级安装指导 详细介绍如何在Linux系统中完成iar下载与环境配置,帮助开发者快速上手IAR集成开发环境,解决常见安装问题,提升开发效率。 阅读详情

题目描述

在这里插入图片描述在这里插入图片描述

题目链接:https://ac.nowcoder.com/acm/problem/15553
来源:牛客网

题意分析:

在n个连续排列的数中,选取两段长为k的区间,使得两端区间不相互重叠且这两段区间元素之和最大,求这个最大值。

样例分析:
2
6 3
1 1 1 1 1 1
黄色标明了选取的两段区间,最大值为6

8 2
-1 0 2 -1 -1 2 3 -1

黄色标明了选取的两段区间,最大值为7

知识点引入:

前缀和:前缀和可以理解为高中数学知识中数列的前n项和,sum[i]即为前i个元素之和,在循环读入的过程中,用sum[i]=sum[i-1]+a;即可得到前缀和数组。

解题思路(数组下标从1开始):

p[i] 表示以第i个元素结尾的且区间长为k的元素之和,于是 p[i]=sum[i]-sum[i-k];

以下利用动态规划的解题技巧:​

dp[i] 表示以i结尾的区间长为k的最大元素和。
dp数组的边界条件:
当区间长度恰好为k时,dp[k]=p[k]。即 if(i==k) dp[i]=p[i]

非边界条件下dp[i]的状态转移为:
else if(i>k)                   dp[i]= dp[i-1] > p[i] ? dp[i-1] : p[i];
(若以i结尾的k个元素和p[i]比前 i-1 个元素中连续k个元素和的最大值还要大,则前i个数中最大的长为K的区间和就是p[i],否则不变)

ddpp[i] 表示以i结尾的两端长为 k的区间的最大元素和
ddpp数组的边界条件:
当区间长恰为2*k时,ddpp[2*k]=p[2*k]+dp[k];
即if(i==2*k) ddpp[i]=p[i]+dp[i-k];

非边界条件下dp[i]的状态转移为:
else if(i>2*k)
ddpp[i]=(ddpp[i-1]>p[i]+dp[i-k] ? ddpp[i-1] : p[i]+dp[i-k]);

完整代码:

#include<stdio.h>
   int main(){
   int T;
   scanf("%d",&T);
   while(T--){
   int n,k;
   scanf("%d%d",&n,&k);
   long long sum[200010];
   long long  p[200010];
   long long dp[200010];
   long long ddpp[200010];
   for(int i=0;i<k;i++) dp[i]=0;
   long long max;
   sum[0]=0;
   for(int i=1;i<=n;i++)
   {
   long long  a;
   scanf("%lld",&a);
   sum[i]=sum[i-1]+a;
   
   if(i>=k)   
   p[i]=sum[i]-sum[i-k];
      
   if(i==k) 
   dp[i]=p[i];
   
   else if(i>k) 
   dp[i] = ( dp[i-1] > p[i] ? dp[i-1] : p[i] );
              
   if(i==2*k) 
   ddpp[i]=p[i]+dp[i-k];
              
   else if(i>2*k)  
   ddpp[i]=(ddpp[i-1]>p[i]+dp[i-k] ? ddpp[i-1] : p[i]+dp[i-k]);
    }
   printf("%lld\n",ddpp[n]);
          }
      return 0;
           } 

空间复杂度优化

可以将dp数组和ddpp数组换成变量dp和变量ddpp,以降低空间复杂度。

Arduino ESP32S3 基础入门教学大纲 ESP32环境、Arduino 阅读详情

相关推荐

USB接口ESD保护电路:深度剖析与选型建议

USB接口在热插拔和频繁使用中极易遭遇静电放电(ESD)冲击,导致芯片损坏或通信异常。本文结合实际电路设计经验,详解TVS二极管、集成ESD防护器件等方案在USB接口上的应用要点,重点分析钳位电压、结电容、IEC 61000-4-2等级等关键参数对信号完整性与防护效果的影响,助你为USB接口匹配高可靠、低干扰的ESD保护方案。

weixin_36289813的博客 510

动态规划

动态规划是算法中一个重要而高效的算法,就自己学习和理解整理了这个笔记

Simon的博客 931

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

LeetCode:word-break

题目描述 Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s ="leetcode",

林中小屋 531

从零构建SOEM主站:基于STM32的EtherCAT伺服控制实战指南

本文详细介绍了如何从零构建基于STM32的SOEM主站系统,实现EtherCAT伺服电机的高精度控制。通过硬件选型、SOEM协议栈移植、PDO/SDO配置优化等实战步骤,帮助开发者掌握工业自动化中的关键运动控制技术,特别适用于23位编码器伺服电机的应用场景。

weixin_29186249的博客 666

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。本文研究如何利用大语言模型生成分类系统的分析

姚家湾博客 1862

【leetcode】动态规划::前缀和

dp[x1-1][y1-1]表示以(1,1)为左上角,(x1-1,y1-1)为右下角的子矩阵的和。其中,dp[i-1][j]表示以(1,1)为左上角,(i-1,j)为右下角的子矩阵的和;dp[i][j-1]表示以(1,1)为左上角,(i,j-1)为右下角的子矩阵的和;dp[i-1][j-1]表示以(1,1)为左上角,(i-1,j-1)为右下角的子矩阵的和;A[i][j]表示矩阵A的元素。首先,我们可以定义一个辅助矩阵dp,其中dp[i][j]表示以(1,1)为左上角,(i,j)为右下角的子矩阵的和。

石墨博客 1689

cartographer基于3d地图的纯定位模式

关于纯定位模式呢,本人试过2d和3d,怎么说呢,有条件的话,建议直接上3d,因为博主当初在做定位时针对室内和室外都尝试过,2d只在室内环境下效果会很棒,但是在室外就呵呵啦!所以这里直接讲解3d室外定位(建图篇请自己查看我之前的博客:[3d建图](https://blog.youkuaiyun.com/qq_40216084/article/details/105531983) 看了我之前的博客大概知道配置文件和源文件路径了,我这里就不把路径写出来了,挺麻烦的。直接讲怎么做把,有不懂的留言,看到了我一定知无不言。 **首

qq_40216084的博客 5552

动态规划(二):以计算路径总数为例,继续总结动态规划解题思路

前言 在上篇文章:以最简单的斐波拉契数列为例子初步认识动态规划中末尾,有讲到动态规划的解题思路,但在解析斐波拉契数列时,也许是大家对它很熟悉,所以对于递归 + 记忆化这一步骤感受可能不是特别深。接下来,将严格按照上篇文章所说的解题思路来解决计算路径总数问题。 一、计算路径总数问题描述 根据图中问题的描述,其中一个解法其实可以用高中所学的排列组合来做,奈何本人高中数学是体育老师教的,这里就不献丑了! 咱们作为一名程序员,还是通过程序来解决吧~由文章主题可知,计算路径总数是一道动态规划的题,根据咱们在上篇

avengerEug的博客 1491

156、手机摄像头模组结构拆解:从保护盖到 FPC 连接器的完整装配剖面

本文深入解析手机摄像头模组结构设计要点。作者结合项目经验,指出保护盖密封胶在低温收缩会导致边缘漏光问题,强调结构细节比算法参数更关键。文章逐层拆解模组组件:保护盖厚度需平衡抗冲击与光学性能;镜筒内镜片组装配顺序和公差控制直接影响成像质量;IR滤光片厚度公差±0.02mm会改变红外截止波长;CSP封装需注意金线加固;FPC连接器的信号完整性和机械可靠性设计。最后给出5条实用建议,包括密封胶选型、镜片对位检测等,强调模组结构设计是"一票否决制"的基础工程。(149字)

sundong_81的博客 105

【FreeSwitch开发实践】外呼网关配置(拨打电话)

FreeSwitch开发一个重要应用是外呼,所谓外呼就拨打真实电话或手机号呼叫,配合语音机器人可以实现智能客服的功能。外呼配置主要是配置外呼服务器,外呼服务器主要指SIP网关,每个外呼服务器就是一个SIP节点,FreeSwitch服务也可以是一个SIP节点。本文主要介绍了FreeSwitch外呼相关配置,主要有外呼配置的模式,包括注册模式和非注册模式网关加载的查看方法拨号中常见的呼出配置和呼入配置如果觉得有些帮助或觉得文章还不错,请关注一下博主,你的关注是我持续写作的动力。............

xiao2macf的专栏 1万+

前缀和,今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完, 他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续

#include <iostream> #include <algorithm> #include <string.h> #include <string> using namespace std; long long int x[200001], sum[200001] , p[200001], dp[200001], ddp[200001]; int main() { int t; cin >> t; int i; for (i = .

qq_46176868的博客 765

全面认识PFC和LLC

想象一下,你在拉一辆车,如果你的力气都用在推动车子前进的方向上,这样拉车会比较轻松。而如果你的力气用在不正确的方向,比如侧向、斜向,那就需要更大的力气才能推动车子。PFC就是在帮助电流“朝着正确的方向”流动,这样可以用更少的能量做更多的事情,减少无用的功率损耗。PFC负责将电流方向对齐,让电源效率更高,而LLC负责电压的高效转换,两者配合可以在更宽的负载范围内保持高效率。综上所述,PFC LLC电路是一种高效的电源转换电路,通过PFC模块和LLC模块的组合,实现了从交流电到直流电的高效转换。

weixin_43199439的博客 6096

【牛客】数学考试题解

原题地址 题目描述 今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完, 他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间, 即[L,L+1,L+2,…,L+k-1],[R,R+1,R+2,…,R+k-1](R >= L+k)。 输入描述: 第一行一个整数T(T<=10),代表有T组数据 接下来一行两个整数n,k,(1<=n<=200,000),(1<=k,2k <=

Ego12138的博客 6427

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学考试(牛客3月27日题目 前缀和+线性DP)

数学考试 题目链接 题解链接 题目描述 今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完, 他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间, 即[L,L+1,L+2,…,L+k-1],[R,R+1,R+2,…,R+k-1](R >= L+k)。 输入描述: 第一行一个整数T(T&lt...

NaNa 356

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

牛客网【每日一题】3月27日 数学考试

题号 NC15553 名称 数学考试 来源 2018年长沙理工大学第十三届程序设计竞赛 链接:https://ac.nowcoder.com/acm/problem/15553 来源:牛客网 试题传送门 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 今天qwb要参加一个数学考试,这套试卷...

qq_35975367的博客 642

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学考试 (区间DP)

数学考试 题目描述: 今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完,他想选总共2k 道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间 , 即[L,L+1,L+2,…,L+k-1],[R,R+1,R+2,…,R+k-1](R >= L+k)。 输入描述: 第一行一个整数T(T<=10),代...

Consult_ 428

【ACM算法竞赛日常训练】DAY2题解与分析【比赛】【数学考试】【简单瞎搞题】

DAY2共三题:比赛(概率)数学考试(前缀和与思维)简单瞎搞题(dp)🎈 作者:Eriktse🎈 简介:19岁,211计算机在读,现役ACM银牌选手🏆力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)🚀🎈 个人博客:www.eriktse.com。

StarryCoding 官方账号 227

数学考试

题目链接 题意: n个数中选两个长度为k的不连续区间,使两个区间和最大。 题解: sum数组记录前缀和,sum1数组记录以i为结尾,区间长度为k的区间和,从第2k开始遍历,maxx1维护从0到i-k间最大的区间和,因为从第i-k到i的区间与0到i-k区间无关,所以可maxx2维护这两个区间总和的最大值。 AC代码: // //Write by Yuan Xilan on 2019... // #i...

代不在‘的博客 160

数学考试、最大子矩阵

题目链接 题意:给 n 个数,求两个长度为 k 的不相交的区间的和。 思路:sum数组表示前 i 个数的和,sum [ j ] - sum [ i ]可以表示数组 i 到 j 的和 leftmax数组表示 i 左边区间为 k 的最大和。 rightmax数组表示 i 右边区间为 k 的最大和。 #include <iostream> #include <cstring> #include <algorithm> #include <cstring> using

weixin_44350170的博客 211

数学考试(牛客每日一题)变形一

题意 给一个长度为n的区间,找两个不相交的区间,区间的长度不确定。 思路 这个题和数学考试那一题唯一不同的是区间的长度不确定了。 在数学考试那个题中,我们是记录了一个maxn[i] 来表示i~n中的区间为k的最大值,现在区间不确定了。 maxn[i]=max(maxn[i+1],sum[j]-sum[i-1]) j>i. 原来j-i的区间是固定的,现在j不确定,但是我们如果想让sum[j]-sum[i-1]的值最大,我们肯定要尽量要让sum[j]最大,所以我们可以在维护一个maxsum[i]表示i~

qq_45719639的博客 180

2021年最后的每日一题练习 (持续更新)

题号 知识点 我的题解 1 NC50439 堆+贪心 (贪心+小顶堆)NC50439 tokitsukaze 2 NC13230 3 NC15553 4 NC50528 5 NC13331 6 NC22598 7 NC23053 8 NC13886 9 NC13221 ...

☆迷茫Dog的秘密基地☆ 211

前缀和 及其优化技巧

在一些题目或者场景中,出现了子数组*,连续一段区间,并且和求数量或者判断数量相关,很大程度上可以向前缀和的方去思考。 在实际的题目中,单独使用前缀和可以解决问题,但有些题目受限于时间和空间复杂度,单独依靠前缀和往往不能AC,需要一些额外的技巧或者附加数据结构,例如动态规划和HashMap。

weixin_45532984的博客 1609

牛客——数学考试

今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完, 他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间, 即[L,L+1,L+2,....,L+k-1],[R,R+1,R+2,...,R+k-1](R >= L+k)。

yu_annn的博客 384

【动态规划】背包求最大最小价值问题

《经典算法之背包求最大最小价值问题》

青年有志 6028

前缀和的数学推导

在leetcode有一些题利用的是前缀和方法,很多时候都用的是图形法解,一开始还是有点费解的,特别是对于我这样不太擅长图形转化成公式的人来说。本文用的单纯的数学推导得到递推公式,理解的基础上直接用代码实现公式。 前缀和思路在于区域相减,以leetcode的304题为例子 S[row1,row2][col1,col2]=Σrow1row2Σcol1col2Matix[i][j]S[row1,row2][col1,col2] = \Sigma_{row1}^{row2}\Sigma_{col1}^{col2}

洗脚看电视的博客 321
下一篇: 单调队列+滑动窗口例题题解
准图灵奖得主
博客等级 码龄8年 355粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值