昨天的只是输出了最大子数组的和,在上次的基础上改进使得能够输出该子数组。
//求数组中最大子序列的和 王世强 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()!='
') //输入数组部分,空格表示输入结束
{
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<<"
最大子数组为:";
for(int q=s;q<=e;q++)
{
cout<<Array[q]<<" ";;
}
return 0;
}
在每一次的比较中加入头和尾的指定,s为最大子数组的头,e为最大子数组的尾。
结果截图如下:
