PAT Maximum Subsequence Sum (25)

来源:互联网 发布:软件测试好不好 编辑:程序博客网 时间:2024/06/04 19:59
#include <stdio.h>int arr[10008];//保存原始数组int dp[10008];//这个数组保存的是以i为结尾的最大子串的长度。int begining[10008];//把以i为结尾的最大子串的开头下标保存下来。int n;bool allneg=1;int main(){    //freopen("/Users/pantingting/Documents/code/data/input", "r", stdin);    scanf("%d",&n);    int max,maxj;    for (int i=0; i<n; i++) {        scanf("%d",&arr[i]);        if (arr[i]>=0) {            allneg=0;//表示并非全部负数        }    }    dp[0]=arr[0];//以0结尾的最大连续子串只能是arr【0】    begining[0]=0;    max=dp[0];    maxj=0;    for (int i=1; i<n; i++) {        if (dp[i-1]>0) {            dp[i]=arr[i]+dp[i-1];//如果以i-1为结尾的最大子串>0则包含上上一个以i-1为结尾的子串            begining[i]=begining[i-1];        }        else{            dp[i]=arr[i];//如果前面子串<0,那么以i为结尾的最大子串则为自己,若包含前面子串,得到的值更小            begining[i]=i;        }        if (dp[i]>max) {            max=dp[i];            maxj=i;        }    }    if (allneg) {        printf("%d %d %d\n",0,arr[0],arr[n-1]);        return 0;    }    printf("%d %d %d\n",dp[maxj],arr[begining[maxj]],arr[maxj]);    return 0;}

0 0
原创粉丝点击