动态规划
文章平均质量分 53
Jozky86
这个作者很懒,什么都没留下…
展开
-
SOS_dp算法
Codeforces博客简介:前置知识:状压dpSum over Subsets dynamic programming,简称Sos dp,状压dp的一种用一个列题引出SOS dp:给你一个由2N2^N2N个整数组成的确定数组A,我们需要计算对于任意的x,F(x)=所有A[i]的和sumF(x)=所有A[i]的和sumF(x)=所有A[i]的和sum且x&i=i,i是x的子集整理成公式就是:F[mask]=∑i∈maskA[i]F[mask]=\sum_{i∈mask}A[i]F[ma原创 2021-10-23 16:44:58 · 803 阅读 · 0 评论 -
P3195 [HNOI2008]玩具装箱
P3195 [HNOI2008]玩具装箱题意:n件玩具,第i件玩具经过压缩后的一维长度为CiC_iCi,现在把玩具装入一维容器中,要求:在一个一维容器中的玩具编号是连续的如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物。制作容器的费用与容器的长度有关。如果容器长度为x,其制作费用为(x−L)2(x-L)^2(x−L)2.问所有容器的总费用最小是多少题解:斜率优化dp入门题前置知识:需要会单调队列优化当dp方程为dp[i]=a[i]+b[i]时,这个方程是O原创 2021-10-21 20:13:24 · 358 阅读 · 2 评论 -
P1437 [HNOI2004]敲砖块
P1437 [HNOI2004]敲砖块题意:在一个凹槽中放置了 n 层砖块、最上面的一层有 n 块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示:14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 层的第 j 块砖的话,若 i=1,你可以直接敲掉它;若 i>1,则你必须先敲掉第 i-1 层的第 j 和第 j+1 块砖。你现在可以敲掉最多 m 块砖,求得原创 2021-10-14 13:20:07 · 170 阅读 · 0 评论 -
《算法竞赛进阶指南》 0x50 动态规划
题目后面加 ∗*∗ 表示题目过于简单或不具备特征性,不做题解线性DPAcWing 271. 杨老师的照相排列 811人打卡AcWing 272. 最长公共上升子序列 778人打卡(∗*∗)AcWing 273. 分级 536人打卡AcWing 274. 移动服务 513人打卡AcWing 275. 传纸条 568人打卡(∗*∗)AcWing 276. I-区域 161人打卡AcWing 277. 饼干 323人打卡背包AcWing 278. 数字组合792人打卡AcWing 279.原创 2021-07-30 19:24:42 · 358 阅读 · 0 评论 -
CF 1529C Parsa‘s Humongous Tree
CF 1529C Parsa’s Humongous Tree题意:给你一颗n个点,n-1个边的树,每个点的点权为一个区间值,树的值为边权和。边权为该边的两个端点的点权差的绝对值的和问树的值最大是多少?题解:这个题给的点权是一个范围值,范围值的话如何找打最佳值?结合题目给的边权计算方法:两个点的权值差的绝对值,如果一个点权是[a,b],另一个是[c,d],那边权的最大值要么是abs(a-d),要么是abs(b-c),也就是端点之间的差,这样每个点的点权就是二选一,我们可以用树形dp来解答dp[原创 2021-07-11 18:42:42 · 160 阅读 · 0 评论 -
(牛客网)树型dp
树型dp视频链接(如果想购买网课,可以用我的邀请码)用我的链接购买,我再反你10,一共花54多值购买链接不放心可以先加我好友2830872914总试题链接文章目录树型dpNC15033 小G有一个大树NC511788 没有上司的舞会(最大独立集)poj1463 NC106060 Strategic game(树的最小点覆盖)NC24953 CellPhoneNetwork(树的最小支配集)以上小总结:NC50505 二叉苹果树延伸-->多叉树情况NC202475 树上子链(树的直径)NC原创 2020-08-22 15:59:44 · 347 阅读 · 0 评论 -
吉吉王国(二分+树形dp)
吉吉王国题意:n个点,m个边,有边权,现在要求叶子节点无法与1号点连通,要求切断的总长度不能超过m,且切断的最长的长度尽可能断题解:题意的前半部分可以确定是树形dp,后半部分可以确定为是二分树形dp部分和这个题差不多Rinne Loves Edges我们二分一个长度的上限,然后在dp中限制,判断二分的值是否合理代码:#include <bits/stdc++.h>#define endl '\n'using namespace std;const int maxn=1原创 2021-07-10 17:10:17 · 263 阅读 · 0 评论 -
Rinne Loves Edges
Rinne Loves Edges题意:有n给点,m个边,每个边有边权,给你一个点S,问最少花多少代价,可以让叶子节点无法与S点连通题解:dp[u]:表示u到叶子节点的最短费用的和dp[u]+=min(dp[v],w);代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){原创 2021-07-10 16:16:13 · 141 阅读 · 0 评论 -
树上子链(树形dp求树的直径)
树上子链题意:给定一棵树 T ,树 T 上每个点都有一个权值。定义一颗树的子链的大小为:这个子链上所有结点的权值和 。请在树 T 中找出一条最大的子链并输出。题解:求树的直径,题目中存在负权值,树形dp求树的直径可以处理负边权直径的模板:void DP(int u,int pa){ dp[u]=0; for(int i=head[u];i;i=E[i].nxt) { int v=E[i].v; if(v==pa) continue;原创 2021-07-10 15:58:16 · 316 阅读 · 0 评论 -
P2015 二叉苹果树
P2015 二叉苹果树题意:一个完全二叉树,n个点,n-1个边,每个边都有边权,问保留q个边,所能保留的最大边权是多少题解:树形dpdp[u][i]表示u的子树上保留i条边,至多保留的苹果数目如何建立状态转移方程呢?我们设v是u的一个子节点,现在以u为根的子树要保留i个边,那我们可以让v保留j个边,u和v之间就有一个边,u只需要保留i-j-1个边即可(相当于u的儿子节点v分担了一部分任务,另一部分其他负责)这样可得:dp[u][i] = max(dp[u][i],dp[v][j]+w[u]原创 2021-07-10 13:03:18 · 274 阅读 · 0 评论 -
P2016 战略游戏
P2016 战略游戏题意:他要建立一个古城堡,城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。请你编一程序,给定一树,帮 Bob 计算出他需要放置最少的士兵。题解:和这个题是一样的Strategic game(树的最小点覆盖)代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);原创 2021-07-08 18:26:05 · 109 阅读 · 0 评论 -
Acwing 1072. 树的最长路径
Acwing 1072. 树的最长路径题意:每个边有权值,求树的直径题解:两遍dfs可以求,这里用树形dp的方法,我们将1作为根节点来看这棵树我们可以将点看作是钉子,边就是挂在钉子上的绳子,我们只需要求出第一长和次长的绳子,就可以得到最长的路径详细过程不作表述代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace st原创 2021-07-08 17:46:58 · 181 阅读 · 2 评论 -
Acwing1086. 恨7不成妻(未解决)
Acwing1086. 恨7不成妻题意:问一个区间内与7无关的整数的平方和与7有关包括:1.整数中某一位是 7;2.整数的每一位加起来的和是 7 的整数倍;3.这个整数是 7 的整数倍。题解:数位dp,有点难。。这个题解讲的非常详细参考题解代码:...原创 2021-07-08 15:44:02 · 133 阅读 · 0 评论 -
Acwing 1085. 不要62
Acwing 1085. 不要62题意:问[n,m]这些数中有多少数不包含4,且不包含连续的62题解:经典数位dp,分析过程以前的数位dp博客有写Acwing 1082. 数字游戏代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){ int s=0,w=1;原创 2021-07-08 15:18:17 · 144 阅读 · 0 评论 -
Acwing 1084. 数字游戏 II
Acwing 1084. 数字游戏 II题意:指定一个整数闭区间 [a.b],问这个区间内有多少个取模数。取模数:这种数字必须满足各位数字之和 mod N 为 0。题解:数位dp这里不细讲数位dp了,可以看看Acwing 1081. 度的数量(以及本人对数位dp的浅薄理解)Acwing 1082. 数字游戏这里光讲讲本题与数位dp模板不同的地方本题要求是的是各位数之和mod N为0在预处理树的左侧部分时,我们设dp[i][sum][j]:表示长度为i,最高位为j的,各位之和%N等于su原创 2021-07-07 17:05:48 · 175 阅读 · 0 评论 -
Acwing 1081. 度的数量(以及本人对数位dp的浅薄理解)
题意:求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。题解:数位DP技巧1:[X,Y]=>f(Y)-f(X-1)技巧2:用树的方式来考虑。在本题中,题意是问[X,Y]中的数 转发成B进制,B进制有K位是1比如样例中:17 ,k=2,B=2就是把17转成二进制,看二进制中是否有K个117的二进制是:10001,说明17=24+20,符合要求我们现在想具体做法:我们利用前缀和的方式,想法1~n之间符合要求的个数,这样就可以方便求出原创 2021-07-07 16:10:23 · 415 阅读 · 0 评论 -
Acwing 1083. Windy数
Acwing 1083. Windy数题意:Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共有多少个 Windy 数?题解:和这个题没啥区别Acwing 1082. 数字游戏题解连接代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long原创 2021-07-07 15:45:18 · 187 阅读 · 0 评论 -
Acwing 1082. 数字游戏
Acwing 1082. 数字游戏题意:现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。题解:利用数位dp的套路来做我们还是利用前缀和来做我们先求1~n中满足情况的个数对于一个n位数,我们将其每一位用vector存(an-1 ~ a0),我们从高位到低位开始一位一位考虑,对于第an-1位,我们有两种考虑情况,一个是填0 ~ an-1-1,另一个是填an-1,对于第一个情况,往往是可以直接求出来的,利用组合数或者dp可以求出,在本题中,我们用dp来求第一个情况原创 2021-07-07 14:58:59 · 233 阅读 · 0 评论 -
P3205 [HNOI2010]合唱队
P3205 [HNOI2010]合唱队题意:有n个数,然后插入队伍中,如果队列当前为空,则直接插入,然后每次插入和上一次插入的比较,如果大于,插入当前队列的最右侧,如果小于,插入当前队列的最左侧现在给你一个插入后的队形,问有多少种插入方式?题解:我们这样分析,对于区间[l,r],最近一次插入的要么是第l位要么就是第r位所以我们设f[i][j]表示可以排成理想队列中[i,j]区间,且以最后一个排进去是第i人的初始队列种数。设g[i][j]表示可以排成理想队列中[i,j]区间,且以最后一个排进去是原创 2021-07-02 20:24:57 · 95 阅读 · 0 评论 -
AcWing 320. 能量项链
AcWing 320. 能量项链题意:题解:和环形石头合并基本一样代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='原创 2021-07-02 19:04:50 · 130 阅读 · 0 评论 -
Acwing1069. 凸多边形的划分
Acwing1069. 凸多边形的划分题意:一个N个顶点的凸多边形,划分成N-2个互不相交的三角形,对于每个三角形,其三个顶点的权值相乘都可得到一个权值乘积,试求所有三角形的顶点权值乘积之和至少为多少。题解:区间dp问题我们这么想,对于顶点i到j的最小权值和是多少?我们在i和j中枚举k,i和j形成一个线段,加上k就可以组成一个三角形,此时剩余部分为i到k和k到j,三角形ijk的值我们可以算出,剩余部分相当于小区间,我们已经提前算出,所以取最小就是i到j的答案我们用f[i][j]表示顶点i到顶原创 2021-07-02 19:01:06 · 232 阅读 · 0 评论 -
加分二叉树
加分二叉树题意:给你一个数的中序表达式,然后一颗子树的分数=左子树的分数*右子树的分数+根的分数给你所有点的分数,让你构造出分值最大的树,输出前序遍历题解:区间dp问题设dp[i][j]表示中序遍历是w[i~j]的所有二叉树的得分的最大值树张什么样都可以,而我们只是想要分数最高所以我们从小的子树开始,先决定区间长度,然后枚举区间的起点,决定区间的终点,我们求出每一小区间的最大分值,求大的区间时就用小的合并上区间[l,r]的最大分数k在[l,r]中,为枚举的根dp[i][j]=max(d原创 2021-07-02 18:46:33 · 199 阅读 · 0 评论 -
AcWing 1068. 环形石子合并
AcWing 1068. 环形石子合并题意:n堆石头围成一个圈,然后将相邻两堆合并成新的一堆,得分为新的一堆的石头数问最高得分合最低得分题解:很简单,区间dp的模板题和这个题一样状态转移方程:dpmax[i][j] = max(dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1])dpmin[i][j]=min(dp[i][k]+dp[k+1][j])+sum[j]-sum[i-1]因为题目说的是环形,所以数组复制一倍马上要java期末考试,所以用java练练代码:原创 2021-07-02 18:10:38 · 128 阅读 · 0 评论 -
石子归并 51Nod - 1021
石子归并 51Nod - 1021题意:现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价题解:区间dp的入门题dp[i][j]表示从第i堆合并到第j堆需要多少代价sum[i]为前i堆的数量和如果我们现在要把第i堆合并到第j堆,有一个k,(i<k<j),(dp[i][k]+dp[k+1][j])取最小,然后+sum[j]-sum[i-1]合并这一堆的费用dp[ i ][ j ] = m原创 2021-06-06 21:18:33 · 134 阅读 · 2 评论 -
[蓝桥杯2020国赛]游园安排
题目:题解:本质就是求最长上升子序列,只不过这里是字符串版本的,我们都知道有n^2的LIS,但其实还有O(nlogn)版本的,详细看这里,套上就行另外我发现这里竟然有蓝桥杯全套的编程题离谱,贴上本题地址代码:#include <iostream>#include<algorithm>#include<cstring>#include<string>#include<bits/stdc++.h>using namespace s原创 2021-06-06 21:19:42 · 723 阅读 · 0 评论 -
Tickets HDU - 1260
Tickets HDU - 1260题意:著名的宫崎骏动画片《千与千寻》在中传1500报重映,中传学子有幸成为全国第一批观众。动画学院学生会负责给大家发票,所有的中传同学只要把中传首映《千与千寻》的推送信息发到朋友圈并集够10个赞,就可以免费领取一张电影票。带着对童年的回忆,大家早早的就排队等待领票。为了让大家能够早点领取到心仪的门票,动画学院学生会想知道他们什么时候可以最快把票发完?最好的方法就是分好几处同时发票,并且在每处都尽量减少票的领取时间,让相邻的人一起领票。但是因为每处都只有两位同学在发票原创 2021-06-06 21:19:48 · 139 阅读 · 0 评论 -
免费馅饼 HDU - 1176
免费馅饼 HDU - 1176题意:都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝,每秒种只有在移动不超过一米的范围内接住坠落的馅饼。现在给这条小径如图标原创 2021-06-06 21:19:55 · 135 阅读 · 0 评论 -
Piggy-Bank HDU - 1114
Piggy-Bank HDU - 1114题意:小猪储钱罐存在一个大的问题,即无法确定其中有多少钱。因此,我们可能在打碎小猪储钱罐之后,发现里面的钱不够。显然,我们希望避免这种不愉快的情况。唯一的可能是,称一下小猪储钱罐的重量,并尝试猜测里面的有多少硬币。假定我们能够精确判断小猪储钱罐的重量,并且我们也知道给定币种的所有硬币的重量。那么,我们可以保证小猪储钱罐中最少有多少钱。你的任务是找出最差的情形,即判断小猪储钱罐中的硬币最少有多少钱。我们需要你的帮助。不能再贸然打碎小猪储钱罐了!题解:完全背包原创 2021-06-06 21:20:01 · 93 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping! HDU - 1087
Super Jumping! Jumping! Jumping! HDU - 1087题意:给定一条长度为n的序列,其中一定存在一条元素和最大的严格上升子序列,求这条序列的元素和。题解:最长上升序列模板题代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){ int s原创 2021-06-06 21:20:09 · 80 阅读 · 0 评论 -
[kuangbin]专题12 基础DP
HDU 1024 Max Sum Plus PlusHDU 1029 Ignatius and the Princess IVHDU 1069 Monkey and BananaHDU 1074 Doing HomeworkHDU 1087 Super Jumping! Jumping! Jumping!HDU 1114 Piggy-BankHDU 1176 免费馅饼HDU 1260 TicketsHDU 1257 最少拦截系统HDU 1160 FatMouse’s SpeedPOJ 1原创 2021-06-04 10:31:33 · 137 阅读 · 0 评论 -
Doing Homework HDU - 1074
Doing Homework HDU - 1074题意:有n个任务,每个任务有一个截止时间,超过截止时间一天,要扣一个分。求如何安排任务,使得扣的分数最少。(1<=n<=15)题解:n很小,可以往状压dp方向去想我们用i枚举所有的状态,然后对于第j个任务,tmp=i-(1<<j),tmp表示状态i在未完成j的前一个状态tim[]表示当前状态所花费的时间,那么完成第j个任务所扣分数为score=tim[tmp]+cost[j]-dead[j],完成tmp所需时间+完成任原创 2021-06-04 10:14:26 · 190 阅读 · 0 评论 -
Monkey and Banana HDU - 1069
Monkey and Banana HDU - 1069题意:有n种类型的砖块,每种类型的砖块都有无限个。第i块砖块的长宽高分别用xi,yi,zi来表示。 同时,由于砖块是可以旋转的,每个砖块的3条边可以组成6种不同的长宽高。在构建塔时,当且仅当A砖块的长和宽都分别小于B砖块的长和宽时,A砖块才能放到B砖块的上面。问最高可以堆出的砖块们的高度题解:我们设dp[i]表示以i个砖是最下面的砖块时,可以达到的最大高度我们先存下每个砖的六个状态(即长宽高互相换位置),然后按照长和宽从小到大排序,排序后原创 2021-06-04 09:10:36 · 133 阅读 · 0 评论 -
AcWing 1091. 理想的正方形
AcWing 1091. 理想的正方形题意:有一个 a×b 的整数组成的矩阵,现请你从中找出一个 n×n 的正方形区域,使得该区域所有数中的最大值和最小值的差最小。题解:前置知识:已经学会了一维的单调队列优化dp在本题中要求二维内的最大值和最小值,我们可以将二维拆开,先求每一行,长度为len的最小值b[],然后对于每一列,长度为len的最小值可以利用已知的b[]求得就比如说,第一行到第四行,每行区间长度为k的最小值已经求到,那么每列区间长度为k的最小值,就是这些每行的区间长度为k的最小值的最小值原创 2021-06-01 21:02:16 · 202 阅读 · 0 评论 -
1090. 绿色通道
1090. 绿色通道题意:n个题,每个题所花时间为ai,最多只用不超过t分钟做这个,肯定会有题目做不完,下标连续的一些空题称为一个空题段,问在t分钟内最长的空题段至少有多长?题解:最长的至少,可以考虑二分我们二分这个最长的空题段长度len,然后固定这个之后,问题就变成了每len+1个连续的题目至少要选一个题目(因为最长不选区间为len),诶这不就是烽火传递问题了。详细看代码代码:#include<bits/stdc++.h>#define debug(a,b) printf("%原创 2021-06-01 20:31:32 · 295 阅读 · 0 评论 -
Acwing 1089. 烽火传递
Acwing 1089. 烽火传递题意:有n个数,要保证每m个数中必须选一个,问所选数的最小总和是多少题解:我一开始设的状态为:dp[i]表示前i个数选完的最小值,第i个数可以选也可以不选,但是这样一个状态,如果要这么考虑的话应该开二维数组来表示状态,且答案不好求,所以我们改变状态定义:我们定dp[i]表示第i个必选的,且前i-1个满足条件的最小值我们可以得到状态方程为:dp[i]=min(dp[x])+a[i],x∈[i-m,i-1]dp[x]通过单调队列可以得到那最终的答案是什么?想想我原创 2021-05-28 11:41:53 · 192 阅读 · 0 评论 -
AcWing 1087. 修剪草坪28
AcWing 1087. 修剪草坪题意:有n个数,不能选超过连续的k个数,问所能选的最大值是多少?题解:我们首先分析dp过程:dp[i]表示选择完前i个数的最大值sum[i]表示前i项和对于第i个数,它有两个情况,选和不选1.不选,dp[i]=dp[i-1]2.选,那么以i为结尾的连续长度可以为1,也可以为2。。。,我们设所选的连续长度为j(1<=j<=k),那么这个区间就是[i-j+1,i],而第i-j个数就不选,再往前的区间答案就是dp[i-j-1]所以此时dp[i]=原创 2021-05-28 11:10:28 · 161 阅读 · 0 评论 -
讨“动态规划“檄
我一直遵循着人不犯我我不犯人的原则,但是鉴于动态规划(dp)三番两次的挑衅,我忍无可忍决定发起反击,特写本文记录一下。(瞎写而已emm)原创 2021-05-19 21:42:04 · 205 阅读 · 0 评论 -
Acwing -- 单调队列优化的DP问题
文章目录引入acwing154 滑动窗口应用135 最大子序和1088.旅行问题引入acwing154 滑动窗口题目链接题解应用闫氏最优化问题分析法135 最大子序和题目:输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。题解:我们把这个问题的集合分成n份,第k份表示以A[k]结尾的最大连续子序列是多少我们以A[k]结尾为例,我们从A[k]开始向前延申长度j,j的范围是[1,m],我们引入前缀和,S[k]表示前k个数的前缀和,那原创 2021-05-27 22:47:25 · 218 阅读 · 0 评论 -
Acwing 1088.旅行问题
Acwing 1088.旅行问题题目:一个环形公路,由n个车站,每个站有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。任务:判断以每个车站为起点能否按条件成功周游一周。题解:破环成链,链复制我们从点i出发,能否到i+1,取决于i的油量是否大于等于d[i],即i到i+1的距离所有原创 2021-05-27 22:46:22 · 270 阅读 · 1 评论 -
Acwing 135 最大子序和
Acwing 135 最大子序和题目:输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。题解:我们把这个问题的集合分成n份,第k份表示以A[k]结尾的最大连续子序列是多少我们以A[k]结尾为例,我们从A[k]开始向前延申长度j,j的范围是[1,m],我们引入前缀和,S[k]表示前k个数的前缀和,那么图中长度为j,以A[k]结尾的连续子序列答案就是:S[k]-S[k-j],现在S[k]是固定的,我们要让值最大,就要使得S[k-j]最小,就相当于原创 2021-05-27 22:07:46 · 171 阅读 · 0 评论