1007. Maximum Subsequence Sum (25)

来源:互联网 发布:支票打印软件免费版 编辑:程序博客网 时间:2024/05/11 15:14

题目大意

最大子列和,如果所有数都是负数输出 0 a[0] a[i]

思路

逐个扫描数组,MaxSum为最终的和,ThisSum为当前的子列和,x,y,是最大子列和的左右下标,,tempX 是临时的x。
ThisSum > MaxSum时更新MaxSum = ThisSum,y是当前的下标i,x=tempX。
ThisSum < 0时更新ThisSum = 0,tmpX = i+1。

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main(){    int k, *array;    scanf("%d", &k);    array = (int *)malloc(sizeof(int)*k);    int flag, ThisSum, MaxSum, x, y, tmpX;    flag = ThisSum = MaxSum = x = y = tmpX = 0;    MaxSum = -1;    for (int i = 0; i < k; i++) {        scanf("%d", &array[i]);        if (array[i] >= 0)            flag = 1;        ThisSum += array[i];        if (ThisSum > MaxSum) {            MaxSum = ThisSum;            y = i;            x = tmpX;        }        else if (ThisSum < 0) {            ThisSum = 0;            tmpX = i + 1;        }    }    if (0 == flag)        printf("0 %d %d", array[0], array[k - 1]);    else         printf("%d %d %d", MaxSum, array[x], array[y]);    system("pause");    return 0;}
0 0
原创粉丝点击