1007. Maximum Subsequence Sum (25)

来源:互联网 发布:孙悟空结拜兄弟 知乎 编辑:程序博客网 时间:2024/04/29 06:37

求连续子序列的最大和,记录起始与结束位置。

扫描一遍,和小于0则舍弃。注意全为负数的情况。

#include <iostream>#include <stdio.h>#include <string.h>#include <vector>#include <map>#include <stack>#include <queue>#include <algorithm>#include <set>using namespace std;int a[10001];int main(){    int k;    while(scanf("%d",&k)!=EOF){        for(int i=0;i<k;i++){            scanf("%d",&a[i]);        }        int tmp=0,maxsum=-1;        int start,en=0;        for(int i=0;i<k;i++){            tmp+=a[i];            if(tmp>maxsum){                maxsum=tmp;                en=i;            }            else if(tmp<0){                tmp=0;            }        }        int backtmp=0;        for(int i=en;i>=0;i--){            backtmp+=a[i];            if(backtmp==maxsum)                start=i;        }        if(maxsum<0)            printf("%d %d %d",0,a[0],a[k-1]);        else            printf("%d %d %d",maxsum,a[start],a[en]);    }    return 0;}

0 0
原创粉丝点击