动态规划算法--蛮力算法求最大子段和

问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。

最大子段和是动态规划中的一种。

当b[j-1]>0时b[j]=b[j-1]+a[j],否则b[j]=a[j]。故b[j]的动态规划递归式为:

b[j]=max(b[j-1]+a[j],a[j]),1<=j<=n。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define NR(x) sizeof(x)/sizeof(x[0])

int MaxSum(int a[] , int n)
{
	int sum = 0 ;
	int b = 0 ;
	int i ;
	for(i = 1 ; i < n ; i++)
	{
		if(b > 0)
		   b = b + a[i] ;
		else
		   b = a[i] ;
		if(b > sum)
		   sum = b ;
	}
	return sum ;
}

int main(void)
{
	int sum ;
	int buf[] = { -2, 11, -4, 13, -5, -2};
	sum = MaxSum(buf,NR(buf)) ;
	printf("%d\n",sum);
    return 0 ;
}
时间: 2024-10-02 15:38:15

动态规划算法--蛮力算法求最大子段和的相关文章

一个算法题,求答案啊啊啊啊

问题描述 一个算法题,求答案啊啊啊啊 白班 09:00-18:00 通班 09:00-21:00 每个人每个月通班数量必须等于早中班和中晚班数量之和 早中班 09:00-15:00 中晚班 15:00-21:00 假设:每月按照30计算. 排班规则: 1.每个人每个月固定休息6天连续上班天数不超过7天. 2.每天各班次上班的人数最低需求:8个白班5个通班1个早中班,2个中晚班. 3.每个月每个人的通班天数安排不超过8天. 4.每个人每个月早中班和中晚班的天数之和需要与通班天数相等. 5.每月最多

javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号

 具体题目是这样的: 从1--9中选取N个数字,组成不重复的N位数,从小到大进行编号,当输入其中任何一个数M时,能找出该数字对应 的编号.如 N=3,M=213. 输出:[123(1) , 132(2) , 213(3) , 231(4) , 312(5) , 321(6)]--->X=2 首先看到题目想到的是生成一个从少到大的全排列的数组,然后再遍历数组得到对应的序号(数组下标加1),又或者想到一个个从小到大的生成push进数组,然后判断该数是不是当前题目给的数,如果是的话要求的序号就是当前数

算法 空间坐标-一个空间坐标算法问题,求请教!

问题描述 一个空间坐标算法问题,求请教! 如图,已知矩形长宽,一个正交的十字在矩形内,假设以矩形左下角为坐标原点,根据十字四边的长度Dl,Dr,Db,Df,确定十字形中心点的坐标(黑点). 解决方案 看下初中的三角函数,就是数学问题了.

需要一个简单的逻辑算法思路,求哪位朋友给点建议。

问题描述 需要一个简单的逻辑算法思路,求哪位朋友给点建议. 10C 我已经在MFC中创建一个Clistbox列表,然后打开一个文件夹历遍之后,获得文件夹内所有文件的绝对路径并传送到了Clistbox列表之中.我现在想要做的是,在列表中 按每一定数目的文件(假设20个) 读取,并多开一个线程并将它按某种算法进行加密(类似MD5之类的算法).这个地方 我没有思路. 应该怎么写,调用api函数.有做过类似项目的朋友 给点建议. 解决方案 首先,不是"历遍",是"遍历"然后

注释-数据结构图的算法问题,求大神帮忙。

问题描述 数据结构图的算法问题,求大神帮忙. 连通图G和G中的一个结点v,设计算法,求G的生成树(支撑树)T.其中生成树的根是v,T的层次遍历次序是以v为起点的G的某个广度优先遍历次序.用C或C++写出算法的思想,设计G和T的存储结构,最好给出注释.谢谢. 解决方案 算法--数据结构图的最短路径实现JAVA代码数据结构图论之普里姆算法

源代码-dlx算法问题,求解答,高分啊

问题描述 dlx算法问题,求解答,高分啊 有个算法面试-面试官问了dancinglink-完全不知道这是什么啊-后来知道可能是解精确覆盖问题的-求大家发份代码-并且能够在站内解释一下-才给这么多分哦,求个数独问题的dancinglink解法,有源代码,线上解释. 解决方案 数独问题的dancinglink解法源代码如下,有问题随时联系我.dlx是从数据结构角度优化01矩阵精确覆盖和重复覆盖的数据结构,它用十字链表只存贮矩阵中的非0元,而01矩阵精确覆盖dfs过程中矩阵会越来越稀疏而且每次恢复现场

C++的一题OJ算法竞赛题,求解析(最好附上代码)

问题描述 C++的一题OJ算法竞赛题,求解析(最好附上代码) 小明的密码由N(1<=N<=12)个数字构成,每个数字都可以是0至9中任意一个数字,但小明的密码还有 一个特点就是密码中连续的M(1<=M<=4)个数字的和是质数,现给定M和N,求满足条件的密码共有多少 个? 解决方案 http://gouwu.baidu.com/question/2204084031584739588.html?entry=qb_browse_default 解决方案二: 能给个OJ链接吗? 这题我也

基础算法题,求思路和代码

问题描述 基础算法题,求思路和代码 问题 E: L1-6. 连续因子 时间限制: 1 Sec 内存限制: 128 MB 题目描述 一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入 输入在一行中给出一个正整数N(1<N<231). 输出 首先在第1行输出最长连续因子的个数:然后在第2行中按"因子1*因子2*--*因子k"的格式

算法 ccf acm-有趣的数 算法的题 求思路

问题描述 有趣的数 算法的题 求思路 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数