描述 【题解】 设f[i][j]表示前i个数字分成了j段的最大子段和。 则f[i][j] = max(f[i 1][j]+a[i] (第i个数字和第j段合在一起),f[k][j 1]+a[i] (第i个数字作为第j段的第一个数字,同时在j 1段的情况中找到和最大的那个)) 这样的时间复杂度是$O(m
转载
2019-10-10 16:36:00
50阅读
2评论
最大m子段和问题:将一个整数序列a1、a2、a3……an分成m段,使其总和最大。
(m=1时是最大子段和问题)
存储设计:
int数组b[i][j]: 当序列a被分成i个子段时, 到第j项截至时的最大子段和。该问题最终的最优解为:max { b(m, j ), (m <= j <= n ) }
递归式:
b(i
原创
2012-07-04 14:13:37
2175阅读
P1121 环状最大两段子段和 题目描述 给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大。 输入输出格式 输入格式: 输入文件maxsum2.in的第一行是一个正整数N(N\le 2\times 10^{5})(N≤2×105),表示了序列的
转载
2017-08-25 19:16:00
76阅读
2评论
P1121 环状最大两段子段和传送门思路:dp+dp+dp+维护前后缀最值。当两端非跨环时,直接扫一遍premx[i]+sufmx[i+1],i∈[1,n)pre_{mx}[i]+suf_{mx}[i+1],i\in[1,n)premx[i]+sufmx[i+1],i∈[1,n)即可。当两端跨环,即等价于求中间两端非跨环的最小子段和,直
原创
2022-01-22 11:43:30
26阅读
P1121 环状最大两段子段和传送门思路:dp+dp+dp+维护前后缀最值。当两端非跨环时,直接扫一遍premx[i]+sufmx[i+1],i∈[1,n)pre_{mx}[i]+suf_{mx}[i+1],i\in[1,n)premx[i]+sufmx[i+1],i∈[1,n)即可。当两端跨环,即等价于求中间两端非跨环的最小子段和,直接将a[i]a[i]a[i]取个反,就等价于求最大子段和=sum+mnsum+mnsum+mn。此外此题有点细节需要注意:最小段子和不能包含整个区间,也不能将最
原创
2021-08-10 07:20:00
219阅读
题意:给你n个数,选m个子段,各个子段连续且不相交,长度可以为1,设maxn为各个子区间的和,求最大的maxn。分析:设dp[i][j]代表 j个数选取 i 个子段 ,maxn最大的值;得状态转移方程dp[i][j]=max(dp[i][j−1],dp[i][j−1]+a[j],dp[i−1][k]+a[j](0<k<j)dp[i][j] = max(...
原创
2022-11-02 15:04:14
78阅读
嘟嘟嘟 一道说难也难说简单也简单的dp题。 我觉得我的(有篇题解)做法就属于特别简单的。 平时遇到环的问题都是断环为链,但这道题给了一种新的思路。 观察一下,最后的答案无非就这两种:xxx--xx xxxx xxx xx 对于第二种,有一个特别好的做法:正着求一遍最大子串和,再倒着求一遍,然后枚举断
原创
2021-05-29 19:12:58
156阅读
线性dp
原创
2023-02-16 08:15:06
72阅读
也许更好的阅读体验Description\mathcal{Description}Description给出一段环状序列,即认为a1a_1a1和ana_nan是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大。Solution\mathcal{Solution}Solution要求两个最大子段,考虑其与最大子段的关系 我们先把序列复制一遍,求出长度小于等于nnn的最大子段 ...
原创
2021-12-27 15:39:08
139阅读
http://www.51nod.com/Challenge/Problem.html#problemId=1052 f[i][j][0/1]表示前i个数,划出了j段,第i个数可以不必使用/必须使用的最大值 如果第i个数必须使用,那么它可以加入前一个数所在的那一段(此时它的前一个数必须使用),也可以
转载
2021-08-05 10:37:02
50阅读
动态规划 线性DP 脑洞题
转载
2016-11-04 18:09:00
73阅读
2评论
https://www.51nod.com/Challenge/Problem.html#!#problemId=1052dp[i][j]代表第i个子段以a[j]结尾转移方程dp[i][j]=max{dp[i][j-1],dp[i-1][k]}+a[j] (i-1<=k<=j-1)对于从i-1个子段转移过来的这一部分 可以搞个前缀和 这样时间复杂度为n*m 但空间还是比较紧 发
原创
2022-06-16 06:01:30
60阅读
N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。 例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26。 收起 N个整数组成
转载
2019-05-22 21:59:00
99阅读
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1052 题意: 思路:设$dp[i][j]$表示前j个数构成i个字段时的最大值,并且必须以j结尾。 那么状态转移方程就是: ①$dp[i][j]=max(dp[i][j],d
转载
2017-10-01 11:16:00
63阅读
2评论
DescriptionN个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交
原创
2022-12-26 18:35:07
67阅读
所有正数的和。例如:-2
原创
2023-06-12 17:34:24
26阅读
P1121 环状最大两段子段和 题目描述 给出一段环状序列,即认为$A_1$和$A_N$是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大。 输入输出格式 输入格式: 第一行是一个正整数$N(N≤2×10^5)$ ,表示了序列的长度。 第二行包含$N$个绝对值不大于10000的整数$A_i$,
转载
2018-06-06 08:48:00
56阅读
2评论
题目: Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 27299 Accepted Submission(s
转载
2017-02-18 11:43:00
84阅读
2评论
https://www.luogu.com.cn/problem/P1115 贪心 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int inf=0x3f3f3f3f; cons ...
转载
2021-07-20 17:50:00
84阅读
2评论
给定一个数组,求最大的一段子段的和:如: num = {-5,12,3,-8,2,-9} 最大的子段和为9 int sum = 0; for (int i = 0; i < N; i++) { if (sum + num[i] < 0) { sum = 0;//若sum小于0 那么之前的一段就不要了 ...
原创
2021-08-27 14:29:34
81阅读