最大子段和
老师给乐乐布置了一份作业,乐乐不知如
何解决,找你帮忙解决。老师给一串很长的
数列,要求从中找出连续的一段来使得总和
最大。
输入:第一行包括一个整数 n,表示数
列长度为 n (n<=100000)。
第二行包括 n 个整数来描述这个数列,
每个整数的绝对值不超过 1000。
输出:只有一个整数,为最大的连续段
总和。
样例输入:
5
1 -2 3 1 -4
样例输出:
4
算法分析:设 b[i]为以第 i 个位置的数结
尾的连续的最大子段和,若 b[i-1]大于 0,显
然 , b[i]=b[i-1]+a[i]; 如 果 b[i-1] 小 于 0 , 则
b[i]=a[i],这里应用了一个贪心思想。通过枚
举从第 1 个到第 n 个数结尾的连续的最大子
段和,就可以求出所有数中连续的最大子段
和。
#include<bits/stdc++.h>
using namespace std;
int a[100001],n,i,t,ans;
int main(){
for(i=1;i<=n;i++)
______;
t=a[1];
________;
for(i=2;i<=n;i++) {
if(t<0) _____;
else
_____;
if(t>ans) ______;
}
return 0;
}