58同城类似的网站开发,wordpress安装上传失败,网站遮罩是什么,前端基础知识1050 循环数组最大子段和 N个整数组成的循环序列a[1],a[2],a[3],…,a[n]#xff0c;求该序列如a[i]a[i1]…a[j]的连续的子段和的最大值#xff08;循环序列是指n个数围成一个圈#xff0c;因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列#xff09;。当所给的整数均为负数时…1050 循环数组最大子段和 N个整数组成的循环序列a[1],a[2],a[3],…,a[n]求该序列如a[i]a[i1]…a[j]的连续的子段和的最大值循环序列是指n个数围成一个圈因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列。当所给的整数均为负数时和为0。 例如-2,11,-4,13,-5,-2和最大的子段为11,-4,13。和为20。 Input 第1行整数序列的长度N2 N 50000)
第2 - N1行N个整数 (-10^9 S[i] 10^9) Output 输出循环数组的最大子段和。 Input示例 6
-2
11
-4
13
-5
-2 Output示例 20—————————————————————————————这道题有两种情况第一种就是正常的选连续一段第二种是在尾开始头结束这种情况下肯定是因为中间有一段是负的而且这个负的最小所以只要求一下最小的连续一段用总的值去减掉就好了 #includecstdio
#includecstring
#includealgorithm
#define LL long long
using namespace std;
const int M1e57;
int read(){int ans0,f1,cgetchar();while(c0||c9){if(c-) f-1; cgetchar();}while(c0c9){ansans*10(c-0); cgetchar();}return ans*f;
}
int n,m,s[M];
LL sum,ans,mn,tot;
int main(){nread();for(int i1;in;i) s[i]read(),tots[i];for(int i1;in;i){sums[i];if(sum0) sum0;else ansmax(ans,sum);}sum0;for(int i1;in;i){sums[i];if(sum0) sum0;else mnmin(mn,sum);}ansmax(ans,tot-mn);printf(%lld\n,ans);return 0;
} View Code 转载于:https://www.cnblogs.com/lyzuikeai/p/7445442.html