码迷,mamicode.com
首页 > 其他好文 > 详细

九度1077(最大序列和)

时间:2015-05-02 16:34:37      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:最大序列和

题目链接:点击打开链接


解题思路:

很经典的一道题。首先考虑一下细节问题,当序列都是0时,显然最后要输出0;当序列都是负数时,显然要输出最大的数。

细节处理完了,就可以回到正常轨道。我们开两个变量,分别保存当前的序列和与之前的最大值,我们更新当前序列和的条件是如果当前序列和是负数的时候,那我们必须更新,否则一定会使最后结果减小。更新过程中还要更新之前最大值即可。


完整代码:

#include <iostream>
#include <cstdio>
#include <climits>
using namespace std;
 
typedef long long LL;
int n;
const int maxn = 1000001;
LL a[maxn];
 
LL max(LL a , LL b)
{
    return a > b ? a : b;
}
 
void solve()
{
 
    LL maxpre = 0 , maxnow = 0;
    for(int i = 0 ; i < n ; i ++)
    {
        maxnow = maxnow + a[i];
        if(maxnow < 0)
        {
            maxnow = 0;
        }
        if(maxnow > maxpre)
            maxpre = maxnow;
    }
 
    cout << maxpre << endl;
}
 
int main()
{
    #ifdef DoubleQ
    freopen("in.txt" , "r" , stdin);
    #endif // DoubleQ
    while(cin >> n)
    {
        int flag = 0 , flag2 = 0;
        LL maxx = LONG_MIN;
        for(int i = 0 ; i < n ; i ++)
        {
            cin >> a[i];
            if(a[i] != 0)   flag = 1;
            if(a[i] >= 0)   flag2 = 1;
            maxx = max(maxx , a[i]);
        }
        if(flag == 0)
        {
            cout << "0" << endl;
            continue;
        }
        if(flag2 == 0)
        {
            cout << maxx << endl;
            continue;
        }
        solve();
    }
    return 0;
}


九度1077(最大序列和)

标签:最大序列和

原文地址:http://blog.csdn.net/u013447865/article/details/45440421

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!