最大字段和(动态规划法)

今天算法上机老师要求我们用动态规划法求一堆整数的最大字段和,其递推式如下:
最大字段和(动态规划法)

原理为:当前面j – 1个数的求和大于0 时,执行b[j] = B[j - 1]  + a[j],否则令b[j] = a[j];

好了,完整的代码如下:

 

 

最大字段和(动态规划法)今天算法上机老师要求我们用动态规划法求一堆整数的最大字段和,其递推式如下:

 

                                                   b[j - 1]  + a[j]  ( b[j - 1] > 0 )

         b[j] =                                                                              (1 <=j <k= n)

                  a[j]           (b[ j - 1] <= 0)  

 

原理为:当前面j – 1个数的求和大于0 时,执行b[j] = B[j - 1]  + a[j],否则令b[j] = a[j];

好了,完整的代码如下:

 

// 最大字段和(动态规划法).cpp : 定义控制台应用程序的入口点。

//

 

#include "stdafx.h"

#include<iostream>

using namespace std;

#include<deque>

 

deque<int>de;

 

void input()//输入测试数据

{

int n;

cout<<"请输入任意个整数,以0结束输入!"<<endl;

while(cin>>n ,n != 0)

{

de.push_back(n);

}

}

 

int MaxSection()

{

int max = 0;

int total = 0;

for(deque<int>::iterator iter=de.begin();iter!=de.end();iter++)

    {

if( (total) > 0)//当之前的求和大于0

{

total += (*iter);

//if(total > max)max = total;

}

Else//当之前的和小于0

{

total = (*iter);

}

if(total > max)//如果当前的和大于之前的和

{

max = total;

                                               }

       }

return max;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

cout<<"ddd"<<endl;

input();

cout<<"最大值为:"<<MaxSection()<<endl;;

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值