nyoj 983 首尾相连数组的最大子数组和

最大子段和变形,只是首尾互连。分别求出最大子段和 以及最小子段和,比较最大子段和所有总和-最小子段和的大小。选取最大的那个。

#include<stdio.h>
using namespace std;

int maxsum,cursum,S,s,e;
int a[100001];

int getRes(int a[],int n) {
	
    int max = 0, min = 0, max_tmp = 0, min_tmp = 0, sum = 0;
    
    for (int i = 0; i < n; ++i) {
        sum += a[i];
        max_tmp += a[i];
        min_tmp += a[i];
        if (max_tmp < 0) max_tmp = 0;
        if (min_tmp > 0) min_tmp = 0;
        max = max > max_tmp ? max : max_tmp;
        min = min < min_tmp ? min : min_tmp;
    }
 
    int res =  max > (sum - min) ? max : (sum - min);
    return res;
	//cout << res << endl;
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		
		for(int i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		int tol=getRes(a,n);
		
		if(tol<0)
		printf("0\n");
		else 
		printf("%d\n",tol);	
	}
	return 0;
}

阅读更多
文章标签: 最大子段和
个人分类: dp
上一篇nyoj 整理图书
下一篇nyoj 814 又见拦截导弹
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭