#include

2016年 河南工业大学校赛 G题.最大字段和

最大子段和

时间限制: 1 秒  内存限制: 64 MB  |  提交: 524  解决: 160
  

题目描述

一个大小为n的数组a1到an(−10^4≤ai≤10^4)。请你找出一个连续子段,使子段长度为奇数,且子段和最大。

输入

第一行为T(1≤T≤5),代表数据组数。
之后每组数据,第一行为n(1≤n≤10^5),代表数组长度。
之后一行n个数,代表a1到an

输出

每组数据输出一行,表示满足要求的子段和最大值

样例输入

1
4
1 2 3 4

样例输出

9
思路:由于要求 奇数 长度的连续子串 , 所以 选取 奇数起点 和 偶数起点 , 然后 改一下 最大连续字段和 就好
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100005];
int main(void) {
    int T, n, i, sum, ans;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        for(i=1; i<=n; i++)
            scanf("%d", &a[i]);
        // 以奇数 位置 字符 开始 遍历 奇数长度的 最大连续字段和 
        ans = sum = a[1];
        for(i=2; i<=n-1; i+=2) {
            sum += a[i]+a[i+1];
            if(sum<a[i+1])
                sum = a[i+1];
            ans = max(ans, sum);
        }
        // 以偶数 位置 字符 开始 遍历 奇数长度的 最大连续字段和 
        sum = a[2];
        for(i=3; i<=n-1; i+=2) {
            sum += a[i]+a[i+1];
            if(sum<a[i+1])
                sum = a[i+1];
            ans = max(ans, sum);
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

posted @ 2017-11-22 22:31  0一叶0知秋0  阅读(144)  评论(0编辑  收藏  举报