21 最大子阵列 @计蒜客

题目地址 http://nanti.jisuanke.com/t/21

 

就是求最大子串和,不过通常当最大和 < 0 时,题目要求将最大和置为 0 ,这道题则要求求最大和(可以为负值)

经典的动态规划算法,没有办法处理全是负数的情况。所以只需多加一个变量记录序列的最大值即可。

# include <stdio.h>
# include <iostream>
using namespace std;


int ans[1010];

int main(){
    int t;
    scanf("%d", &t);
    for(int i=0; i<t; ++i){
        scanf("%d" ,&ans[i]);
    }
    //输入数据
    int thissum = 0, sum = 0, ele = ans[0];   //注意这几个变量的初始值

    for(int i=0; i<t; ++i){


        thissum += ans[i];
        if(thissum > sum){
            sum = thissum;
        }


        if(thissum < 0){
            thissum = 0;
        }

       //动态规划部分
        if(ans[i] > ele){
            ele = ans[i];
        }

       //求最大的元素
       
    }
    
    int res = 0;
    if(sum == 0){
        res = ele;

       //全是负数的情况
    }else{
        res = sum > ele ? sum : ele;
    }
    
    
    cout << res << endl;
    return 0;
}

 

posted @ 2016-05-10 19:41  _Ade  阅读(133)  评论(0编辑  收藏  举报