九度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(最大序列和)

相关文章:

你感兴趣的文章:

标签云: