//============================================================================
//
// > File : poj2479.cpp
// > Author : flowertree
// > Time : 2015年11月26日
// > Algorithm : 两段不相交最大子段和
//
//============================================================================
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX 100005
int a[MAX];
int sum[MAX];
int main()
{
int m;
while(cin >> m && m)
{
for(int i = 0; i < m; i++)
cin >> a[i];
int temp = 0;
int max = 0x80000000;
int Max = 0x80000000;
for(int i = 0; i < m - 1; i++)
{
temp += a[i];
if(temp > max)
max = temp;
if(temp < 0)
temp = 0;
sum[i] = max;
}
max = 0x80000000;
temp = 0;
for(int i = m - 1; i > 0; i--)
{
temp += a[i];
if(temp > max)
max = temp;
if(temp < 0)
temp = 0;
if(max + sum[i - 1] > Max)
Max = max + sum[i - 1];
}
cout << Max << endl;
}
system("pause");
return 0;
}
poj 2593 两段不相交最大子段和
最新推荐文章于 2022-02-16 15:25:14 发布