本文主要是介绍九度1077(最大序列和),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:点击打开链接
解题思路:
很经典的一道题。首先考虑一下细节问题,当序列都是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 DoubleQfreopen("in.txt" , "r" , stdin);#endif // DoubleQwhile(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(最大序列和)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!