Problem P03. [算法课分治] 找到最大子序和
求最大子序列和:
- 如果前面的序列为正数,后面紧接着出现一个最大子序列,那这个最大子序列加上一个相邻的正数数列才会是最大子序列。
- 要注意如果全为负数,那么最小的那个负数就是最大的子序列和
#include<iostream>
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int n;
int main()
{
scanf("%d", &n);
long long valmax = 0;
long long val = 0;
int valmin = 0;
while(n--)
{
int x;
scanf("%d", &x);
val += x;
if (valmax < val)
{
valmax = val;
}
else if (val < 0)
{
if (valmin == 0)
{
valmin = val;
}
else if (valmin < val)
{
valmin = val;
}
val = 0;
}
}
if (valmax == 0)
{
printf("%d", valmin);
}
else
{
printf("%lld", valmax);
}
return 0;
}