返回一个整数数组中最大子数组的和(补充:输出该子数组)
昨天的只是输出了最大子数组的和,在上次的基础上改进使得能够输出该子数组。
//求数组中最大子序列的和 王世强 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为最大子数组的尾。
结果截图如下: