这是一道求最长字段和的题目
先来看题面
题目描述
给出一段序列,选出其中连续且非空的一段使得这段和最大。
输入输出格式
输入格式:
第一行是一个正整数N,表示了序列的长度。
第二行包含N个绝对值不大于10000的整数Ai,描述了这段序列。
输出格式:一个整数,为最大的子段和是多少。子段的最小长度为1。
输入输出样例
输入样例#1:
7
2 -4 3 -1 2 -4 3
输出样例#1:
4
这个题的做法有很多,核心的思想是贪心,下面是代码:
#include <bits/stdc++.h>
using namespace std;
int n,j,sum,maxx;
int main()
{
cin>>n>>maxx; ///初始化,将一个数先默认成max
while(--n)
{
cin>>j;
sum=sum>0 ? sum : 0; ///用于求和
sum+=j;
maxx=maxx > sum ? maxx : sum; ///sum在将加上数字之后,是否开始递减
}
printf("%d",maxx);
}