PAT--1007 Maximum Subsequence Sum(dp??)

注意:若全是负数,则输出0 list[0] list[n-1]。
若只有负数和0,则应该输出0 0 0

#include <stdio.h>
#include <malloc.h>

int main()
{
    int n;
    scanf("%d", &n);
    int *list = (int *)malloc(sizeof(int)*n);

    bool flag = false;
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &list[i]);
        if(list[i] >= 0)   //至少有一个非负数
            flag = true;
    }

    if(flag)
    {
        //这里必须要初始化0,比如遇到4  -1 -2 0 -3这种情况
        int last = 0, first = 0, sum = 0;
        for(int i = 0; i < n; i++)
        {
            int tmp = 0;
            for(int j = i; j < n; j++)
            {
                 tmp += list[j];   //tmp是从i开始到j的连续子列的和
                 if(tmp > sum)
                 {
                     sum = tmp;
                     first = list[i];
                     last = list[j];
                 }
            }
        }
        printf("%d %d %d\n", sum, first, last);
    }
    else
        printf("0 %d %d\n", list[0], list[n-1]);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/mch2869253130/article/details/88075942