洛谷P1115 最大子段和
作者:@什么时候才能不困
本文为作者原创,转载请注明出处:https://www.cnblogs.com/haggard/p/17245435.html
题目描述
给出一个长度为 的序列 ,选出其中连续且非空的一段使得这段和最大。
输入格式
第一行是一个整数,表示序列的长度 。
第二行有 个整数,第 个整数表示序列的第 个数字 。
输出格式
输出一行一个整数表示答案。
输入输出样例
输入 #1
7
2 -4 3 -1 2 -4 3
输出 #1
4
说明/提示
样例 1 解释
选取 [3,5] 子段 {3,−1,2},其和为 。
数据规模与约定
- 对于 40% 的数据,保证 。
- 对于 100% 的数据,保证,。
题解:
这是一道很基础的前缀和的题目(前缀和板子题吧)
这题要求最大的子段和,我们可以按照前缀和的方法,用sum[i]存前i项和,当sum[i]<=0的时候,我们让sum[i]=0,然后进行前缀和(如果小于0的话,那么后面的加上前面的一定是在减小的,就没有加的必要了)。
代码:
#include<iostream>
using namespace std;
const int N = 200010;
long long sum[N];
int a[N];
int n;
long long ans=-1000000;//先让ans最小
//最终答案可能为负数
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
sum[i] = sum[i - 1] + a[i];//前缀和
ans = max(sum[i], ans);//取大的
if (sum[i] <= 0)//如果小于0,那么便舍弃前面的
{
sum[i] = 0;
}
}
cout << ans;
}
所念皆有果,梦中有星海,热爱可抵岁月漫长
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现