求最大子数组的和(动态规划法)

来源:互联网 发布:全民突击刷枪内购软件 编辑:程序博客网 时间:2024/05/16 01:07

还是动态规划方法的适应广些,数组可以全是负数。前面没用动态规划方法如何实现,还需进一步思考,明天继续。

/* FindGreatestSumofSubArray.cpp : 定义控制台应用程序的入口点。@mishidemudong @2015-5-22*/#include "stdafx.h"int max(int x, int y){return x > y ? x : y;}int FindGreatestSum(int *A, int length){int CurentSum = A[0];int StateSum = 0;if (A == NULL || length <= 0)return 0;for (int i = 1; i < length; ++i){if (CurentSum <= 0)    //如果和都小于0了,就放弃前面的和,重新等于当前数,并从当前述开始计算和CurentSum = A[i];     elseCurentSum += A[i];if (CurentSum>StateSum)  //记录最大的和,并保存在StateSum中;StateSum = CurentSum; }return StateSum;}
//动态规划的思路;int MaxSum(int *A, int length){int nStart = A[0];int nAll = A[0];for (int i = 1; i < length; ++i){nStart = max(A[i], nStart + A[i]);nAll = max(nStart, nAll);}return nAll;}int _tmain(int argc, _TCHAR* argv[]){int A[] = { -1, -2, -1, -10, -4, -7, -9, -10, -2, -5 };printf("%d\n", FindGreatestSum(A, 9));printf("%d", MaxSum(A, 9));return 0;}


0 0