首页 > 其他分享 >20241016每日一题洛谷P1115

20241016每日一题洛谷P1115

时间:2024-10-16 21:59:16浏览次数:1  
标签:20241016 洛谷 P1115 int 前缀 数组 区间 最大

普及- 洛谷 P1115 最大子段和

读题可知需要在一段一维数组中寻找一段唯一的区间,使区间内的数和最大,即寻找和最大区间

可以想到前缀和的算法

假设输入数组 a[n]

则前缀和数组 b[n]=b[n-1]+a[n]

那么从什么时候开始的一段区间才能使区间内的数和最大?

从前缀和数组逐步来判断这一条件

从 b[1] 开始,当 b[i] 即a的前 i 项前缀和 小于 a[i] 时,那么选取前 i 项 a 的前缀和还不如只从 a[i]开始选

这样就可以得出什么时候开始的一段区间才能使区间内的数和最大,即从 a 的第 i 项开始

将 b[i] 更新为 a[i],继续逐步判断,直到再次找到 b[j] 即a 从 a[i] ~ a[j] 的前缀和 小于 a[j] 时

我们可以说选到 a[j] 就足够了,此时就得到了一个在 a 的第 j 项前的一个区间使区间内的数和最大

将 b[j] 更新为 a[j] ,开启下一轮寻找和最大区间的操作

重复如上寻找和最大区间的操作,可以将每个和最大区间存储在一个数组中

这里我们采用一种节省空间的办法:在每次找到和最大区间后,对其进行判断,若是大于前一个和最大区间,则更新和最大区间

核心代码如下:

int a[200010], b[200010];
int main()
{
	int n,max1;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
		if (i == 1) max1 = a[i];//初始化和最大区间为第一项
		b[i] = max(a[i], b[i - 1] + a[i]);//逐步寻找到边界值,若b[i]<a[i]则更新b[i]为a[i],否则继续逐步计算前缀和
		max1 = max(b[i], max1);//判断是否为最大的 和最大区间
	}
	printf("%d", max1);
	return 0;
}

标签:20241016,洛谷,P1115,int,前缀,数组,区间,最大
From: https://www.cnblogs.com/dianman/p/18471036

相关文章

  • 20241016 模板清理
    区间DP-回文字串记\(f[i][j]\)表示把\(s[i\simj]\)变成回文,最少补几个,从\(f[i][j-1],f[i+1][j],f[i+1][j-1]\)三种情况转移过来即可。感性理解一下这样的状态定义是有最优子结构的。区间DP-合唱队肯定可以区间\(dp\),再注意到状态的转移和上一步有关,所......
  • [20241016]Oracle C functions annotations补充.txt
    [20241016]OracleCfunctionsannotations补充.txt--//网站orafun.info可以查询oraclecfunctions.CreatedbyFritsHooglandwithalittlehelpfromKamilStawiarski.--//可以通过它了解oracle内部C函数.实际上可以直接下载相关文件,在本地使用.https://gitlab.com/Frits......
  • 20241016 模拟赛总结
    期望得分:100+100+55(?)+0=255实际得分:100+100+0+0=200迷迷糊糊睡了好一会才起来打……感觉打的还行,除了T3时间太紧了,有的错误没检查出来挂分了。。T1简单线性DP。\(f_i\)表示前i个数的答案,\(g_i\)有点抽象,先假设当前在\(p\),\(a_p=i\),\(g_i\)表示的是如果\(p\)......
  • 洛谷题单指南-字符串-P3435 [POI2006] OKR-Periods of Words
    原题链接:https://www.luogu.com.cn/problem/P3435题意解读:定义字符串a是b的周期,当a是b的真前缀,且b是aa的前缀。给定字符串s,求s每一个前缀的最大周期长度之和。解题思路:针对字符串babababa进行样例模拟:前缀子串  最大周期  周期长度b空0ba空0babba2......
  • 洛谷 P5175 数列 题解
    纯纯数学题。看到\(n\le10^{18}\)不难想到矩乘,但是\(\log_210^{18}\approx60\),再加上\(T=30000\)的多测,运算量已经来到了\(1.8\times10^6\),所以我们最多有一个\(\sqrt[3]{\frac{1.5\times10^8}{6\times10^6}}\approx4\)的矩阵。\[\becausea_i=xa_{i-1}+ya_{......
  • 洛谷题单指南-字符串-Test
    原题链接:https://www.luogu.com.cn/problem/CF25E https://codeforces.com/contest/25/problem/E题意解读:给定a,b,c三个字符串,求包含a、b、c的最短字符串长度。解题思路:要得到包含a、b、c的字符串,可以通过a、b、c连接形成,而要使得连接后的字符串最短,可以尽可能的利用重叠部分......
  • 洛谷题单指南-字符串-P1470 [USACO2.3] 最长前缀 Longest Prefix
    原题链接:https://www.luogu.com.cn/problem/P1470题意解读:求s最长前缀长度,使得可以拆解成p集合中的字符串解题思路:动态规划:设s字符串下标从1开始,p集合用set<string>保存所有的元素状态表示:设f[i]表示前i个字符s[0~i-1]是否能拆解成p中的元素状态计算:对于j=i-1开始往后倒......
  • 洛谷P1638逛画展
    逛画展题目链接题目描述博览馆正在展出由世上最佳的\(m\)位画家所画的图画。游客在购买门票时必须说明两个数字,\(a\)和\(b\),代表他要看展览中的第\(a\)幅至第\(b\)幅画(包含\(a,b\))之间的所有图画,而门票的价钱就是一张图画一元。Sept希望入场后可以看到所有名师的图......
  • 洛谷P1644跳马问题
    跳马问题题目链接题目背景在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧……题目描述中国象棋半张棋盘如图\(1\)所示。马自左下角\((0,0)\)向右上角\((m,n)\)跳。规定只能往右跳,不准往左跳。比如图\(1\)中所示为一种跳行路线,并将路径总数打印出来......
  • 洛谷P1381单词背诵
    单词背诵题目描述灵梦有\(n\)个单词想要背,但她想通过一篇文章中的一段来记住这些单词。文章由\(m\)个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个)。并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的......