您的位置:首页 > 其它

最大子数组之和

2016-03-24 18:16 162 查看
返回一个整数数组中最大子数组的和,细化分析:

1,在所有以元素tail结尾的子数组中,选出元素和最大的子数组,tail=1,2...n。

2,以元素k结尾的和最大的子数组是包含以元素tail-1结尾的和最大的子数组还是就只有元素tail这一个元素,一共有这两个可选状态。

3,在得到以每个元素结尾的和最大的子数组之后,只要取其中最大值就是所有子数组中最大的子数组。

团队成员:王硕   http://home.cnblogs.com/u/WS1004/



#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 1003
int A[MAXN];
int Tail[MAXN];
// 动态规划思想,时间复杂度O(n)
int main()
{
int length;   //数组长度
int   i;        //循环变量
int  tail;     //记录数组结束的位置
cout<<"please input the length of array:"<<endl;
cin >> length;
cout<<"please input every number of array:"<<endl;
for (i=1; i<=length; i++)
{
cin >> A[i];
}                                               // 计算以tail结尾的子数组之和的最大值,即子数组包含第k个数
Tail[1] = A[1];
for (tail=2; tail<=length; tail++)                   // tail个阶段
{
Tail[tail] = max(A[tail],Tail[tail-1]+A[tail]);
}                                              // 只有两个状态
// 因为和最大的子数组肯定以某个数结尾,所以取这length个子数组的最大值
int All = Tail[1];
for (i=2; i<=length; i++)
All = max(All, Tail[i]);
cout << "MAX :  "<<All<<"  !"<<endl;
}


结果截图如下:





总结:

通过本次程序设计,我深切体会到了合作的重要性。两个人一起讨论,可以使思维更加活跃,达到1+1>2的效果,继续努力吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: