当前位置: 代码迷 >> 综合 >> HAUT OJ 1218: 最大连续子段和
  详细解决方案

HAUT OJ 1218: 最大连续子段和

热度:80   发布时间:2023-12-04 03:22:06.0


问题描述:

给出n个数,求出n个数中最大连续子段和。

输入:

输入分两行,第一行为一个正整数n,第二行输入n个整数xi,

如果最大子段和为负,输出0.

2<=n<=100000,-1000<=x<=1000。

输出:

输出最大连续子段和。

样例输入:

5
1 2 -4 2 3

样例输出:

5


原因分析:

利用sum与0 的关系,来判断前面的数据是否对结果有价值,如果前面的值为负,则赋0,相当于重写开始一段子列,如果大于0则说明有价值,可以继续下去



解决方案:

#include<stdio.h>
int main()
{int n, i, j, k, x, ans, sum;scanf("%d", &n);ans = 0;sum = 0;for (i = 1;i <= n;i++){scanf("%d", &x);sum += x;if (sum > ans)ans = sum;if (sum < 0)sum = 0;}printf("%d\n", ans);return 0;
}