首页 > 学院 > 开发设计 > 正文

51nod1050 循环数组最大子段和 dp

2019-11-11 05:33:42
字体:
来源:转载
供稿:网友
N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+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行:整数序列的长度N(2 <= N <= 50000)第2 - N+1行:N个整数 (-10^9 <= S[i] <= 10^9)Output
输出循环数组的最大子段和。Input示例
6-211-413-5-2Output示例

20

#include<cstdio>#include<iostream>using namespace std;int main(){	int n,t;	long long maxx=0,s=0,sum=0,s1=0,max1=0;	scanf("%d",&n);	for(int i=1;i<=n;i++){		scanf("%d",&t);		sum+=t;		if(s+t>0){			s+=t;			maxx=max(maxx,s);		}		else s=0;		if(s1-t>0){			s1-=t;			max1=max(max1,s1);		}		else s1=0;	}	maxx=max(maxx,sum+max1);	PRintf("%lld/n",maxx);	return 0;}


上一篇:C#之MySql登录

下一篇:1.JUCE——入门

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表