zhousir1991

让开源路人皆知~!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

动态规划——最大子串和

Posted on 2011-05-26 16:51  zhousir1991  阅读(5820)  评论(2编辑  收藏  举报

 

今天复习算法,看到动态规划,引以例题帮助自己来理解这一算法:

 问题描述:

     给定由n个整数(可能为负整数)组成的序列A1,A2,A3,...,An,求该序列的连续子段的和的最大值。当所有整数均为负整数时定义其最大子段和为0

例如   {-4, 11,-2, 13,-7,-3,12} 的最大子段和为22

程序代码:

#include<iostream>  
#define MAXSIZE 100  
using namespace std;  
int MaxSum(int[],int);  
int main(void)  
{  
    
int n;  
    
int array[MAXSIZE];  
    
while(cin>>n)  
    {  
        
for(int i=1;i<=n;i++)  
        {  
            cin
>>array[i];  
        }  
        cout
<<MaxSum(array,n)<<endl;  
    }  
    
return 0;  
}  
int MaxSum(int array[],int n)  
{  
    
int b=0;  
    
int sum=0;  
    
for(int i=1;i<=n;i++)  
    {  
        
if(b>0)  
        {  
            b
+=array[i];  
        }  
        
else  
        {  
            b
=array[i];  
        }  
        
if(b>sum)  
        {  
            sum
=b;  
        }  
    }  
    
return sum;  
}  

          虽寥寥几行代码,但感觉很巧妙。