原理为:当前面j – 1个数的求和大于0 时,执行b[j] = B[j - 1]
好了,完整的代码如下:
今天算法上机老师要求我们用动态规划法求一堆整数的最大字段和,其递推式如下:
原理为:当前面j – 1个数的求和大于0 时,执行b[j] = B[j - 1]
好了,完整的代码如下:
// 最大字段和(动态规划法).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;
}