【问题描述】
给定n 个整数(可以为负数)的序列<a1, a2, … , an>,求:
【输入形式】输入整数个数n,整数序列
【输出形式】最大字段和及相应子序列
【样例输入】
6
-2 11 -4 13 -5 -2
【样例输出】
20
11 -4 13
代码如下:
#include <bits/stdc++.h>
using namespace std;
void Func1(int n,int arr[],int num1[],int num2[])
{
int sum = num1[1],l = 0,r = 0;
for(int i=2;i<=n;i++)
{
if(sum < num1[i])
{
sum = num1[i];
l = i;
r = num2[i];
}
}
cout<<sum<<endl;
for(int i=l;i<=r;i++)
{
cout << arr[i] << " ";
}
cout<<endl;
}
void Func2(int n,int arr[])
{
int num1[n+1],num2[n+1];
num1[n] = arr[n];
num2[n] = n;
for(int i=n-1;i>0;i--)
{
if(num1[i+1] > 0)
{
num1[i] = arr[i] + num1[i+1];
num2[i] = num2[i+1];
}
else
{
num1[i] = arr[i];
num2[i] = i;
}
}
Func1(n,arr,num1,num2);
}
int main()
{
int n;
cin >> n;
int arr[n+1];
for(int i = 1;i <= n;i++)
{
cin >> arr[i];
}
Func2(n,arr);
return 0;
}