zoukankan      html  css  js  c++  java
  • 51nod 1050 循环数组最大子段和

    N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。
    例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
     

    输入

    第1行:整数序列的长度N(2 <= N <= 50000)
    第2 - N+1行:N个整数 (-10^9 <= S[i] <= 10^9)

    输出

    输出循环数组的最大子段和。

    输入样例

    6
    -2
    11
    -4
    13
    -5
    -2

    输出样例

    20


    只需要找出经过数组首尾的最大子段和(总和-不经过首尾的最小子段和)和不经过首尾的最大子段和,对比输出最大。
    代码:
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    int n;
    int s[50000];
    int main() {
        while(~scanf("%d",&n)) {
            ll all = 0,sum1 = 0,sum2 = 0,max_1 = 0,max_2 = 0;
            for(int i = 0;i < n;i ++) {
                scanf("%d",s + i);
                all += s[i];
                sum1 = max(sum1,0ll) + s[i];
                sum2 = max(sum2,0ll) - s[i];
                max_1 = max(max_1,sum1);
                max_2 = max(max_2,sum2);
            }
            printf("%lld
    ",max(max_1,all + max_2));
        }
        return 0;
    }
  • 相关阅读:
    6:定位锚点透明
    5:CSS元素类型
    4、css盒模型和文本溢出
    3、CSS属性组成和作用
    Linq to Xml读取复杂xml(带命名空间)
    经典语句
    服务器不能设置内容类型HTTP头信息后发送
    vs2015 VS-Visual Studio-IIS Express 支持局域网访问
    Mysql一些常用语句
    swfupload上传图片
  • 原文地址:https://www.cnblogs.com/8023spz/p/10908068.html
Copyright © 2011-2022 走看看