数组中最大子数组的和

题目:求一数组中最大子数组的和

  1. 设计思路:
  2. 输入到数组中,直到输入回车停止
  3. 动态规划。
  4. maxSum表示前 i 个数组最大子数组的值。maxSumOfArray为maxSumOfArray+Array[i] 与 Array[i]的最大值 。那么maxSum的值应为maxSum与maxSumOfArray的最大值。
  5. 递推式:
  6. maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]);
  7. maxSum=max(maxSum,maxSumOfArray);

程序代码:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int Array[100];  //定义数组
 6     int length;   //数组长度
 7     for(length=0;;)  //输入数组  遇到Enter即为输入完
 8     {
 9         cin>>Array[length];
10         length++;
11         if(getchar()=='\n')
12         {
13             break;
14         }
15     }
16     int maxSumOfArray,maxSum;  
17     maxSumOfArray=maxSum=Array[0];
18     //当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。
19     //如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。
20     for(int i=1;i<length;i++)
21     {
22         maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]);   //变量maxSumOfArray 为包含Array[i] 与Array[i]    取最大
23         maxSum=max(maxSum,maxSumOfArray);  ////变量maxSum 为maxSum 与 maxSumOfArray    取最大
24     }
25     cout<<"最大子数组和:"<<maxSum<<endl;
26     return 0;
27 }

运行结果:

总结:

      这道题难得地方在于对这种算法的理解,明白了其中的道理,就学会了这种阶梯思路。

      小伙伴博客地址:http://www.cnblogs.com/L-Damon-v/p/5317035.html

posted @ 2016-03-26 08:35  _小学生  阅读(431)  评论(1编辑  收藏  举报