51Nod 1049 最大子段和

来源:互联网 发布:office2016for mac安装 编辑:程序博客网 时间:2024/05/16 18:34
1049 最大子段和基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。Input第1行:整数序列的长度N(2 <= N <= 50000)第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9)Output输出最大子段和。Input示例6-211-413-5-2Output示例20//思路 动态规划,本来我想用分治做的,但是没做出来,然后百度了最大子段和问题,原来还可以用动态规划啊#include<iostream>using namespace std;#define MAX 50005long long a[MAX],b[MAX];int main(){    int n,count=0;    long long max_s;    cin>>n;    for(int i=0;i<n;i++)    {        cin>>a[i];        if(a[i]<0)            count++;    }    b[0]=a[0];    if(count==n)         max_s=0;    else    {        max_s=b[0];    }    for(int i=1;i<n;i++)    {        if(b[i-1]>0)            b[i]=b[i-1]+a[i];        else            b[i]=a[i];        if(b[i]>max_s)            max_s=b[i];    }    cout<<max_s<<endl;    return 0;}

害羞
0 0
原创粉丝点击