返回一个整数数组中最大子数组的和(补充:输出该子数组)

昨天的只是输出了最大子数组的和,在上次的基础上改进使得能够输出该子数组。

//求数组中最大子序列的和  王世强 2016/3/23 
#include<iostream>
using namespace std;
int main()
{
	int Array[100],i=1,dp[100][2],s,e,MaxSum;
	int s0=-1,e0=-1,s1=0,e1=0;
	cout<<"请输入一组数组:";
	cin>>Array[0];
	while(getchar()!='\n')   //输入数组部分,空格表示输入结束 
	{
		cin>>Array[i++];
	}
	dp[0][0]=0;
	dp[0][1]=Array[0];
	for(int j=1;j<i;j++)
	{
		if(dp[j-1][0]<dp[j-1][1])
		{
			dp[j][0]=dp[j-1][1];
			s0=s1,e0=e1;
		}
		else
		{
			dp[j][0]=dp[j-1][0];
		}
		if(Array[j]<(dp[j-1][1]+Array[j]))
		{
			dp[j][1]=dp[j-1][1]+Array[j];
			e1=j;
		}
		else
		{
			dp[j][1]=Array[j];
			s1=e1=j;
		}
	}
	if(dp[i-1][0]>dp[i-1][1])
	{
		MaxSum=dp[i-1][0];
      	s=s0;
 		e=e0;
	}
	else
	{
        MaxSum=dp[i-1][1];
		s=s1;
 		e=e1;
	}	
	cout<<"最大子数组为和:"<<MaxSum<<"\n最大子数组为:";
	for(int q=s;q<=e;q++)
	{
		cout<<Array[q]<<" ";;
	}
	return 0;
 } 

  在每一次的比较中加入头和尾的指定,s为最大子数组的头,e为最大子数组的尾。

结果截图如下:

 

posted @ 2016-03-23 11:08  John_Wang7  阅读(240)  评论(2编辑  收藏  举报