想用下分治法,3、5re,4mle,求助是代码有问题还是太耗内存了
查看原帖
想用下分治法,3、5re,4mle,求助是代码有问题还是太耗内存了
575581
Eurlr楼主2022/5/9 20:18
#include<iostream>
#include<algorithm>
using namespace std;
int zuichangziduan(int* s, int* e)//s时子段开始,e是子段结束
{
	if (s == e)
	{
		return *s;//子段中只有一个数时返回该数
	}
	int ansL;
	int ansR;
	int ans;
	int* s_ = s + (e - s - 1) / 2, * s__ = s_ - 1;
	int* e_ = s_ + 1, * e__ = e_ + 1;//s_和e_将子段再次划分,s__与e__作为求跨两段的最大子段和的迭代器
	int alr_ = 0, alr = 0;
	alr = alr_ = *s_ + *e_;
	while(s__ >= s)
	{
		alr += *s__;
		if (alr > alr_)
		{
			alr_ = alr;
		}
		s__--;
	}
	alr = alr_;
	while (e__ <= e)
	{
		alr += *e__;
		if (alr > alr_)
		{
			alr_ = alr;
		}
		e__++;
	}
	ansL = zuichangziduan(s, s_);//递归
	ansR = zuichangziduan(e_, e);
	ans = max(ansL, max(ansR, alr_));
	return ans;
}
int main()
{
	int arr[20000] = { 0 };
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	int ma = zuichangziduan(arr, arr + n - 1);
	cout << ma << endl;
}
2022/5/9 20:18
加载中...