Advertisement

有序表案例No.7:最大连续子序列之分治+递归解法

阅读量:

Problem Description
给定一个由n(1≤n≤5×1e4)个整数组成的一维数组A = {A₁,A₂,…,Aₙ}(其中元素可取负值),要求计算该数组中所有可能连续子数组的和的最大值。特别地,在所有元素均为负值的情况下,默认其最大子数组之和为零。根据上述定义可知,在满足条件1≤i≤j≤n的前提下,最优解即为Max{0, A_i + A_{i+1} + … + A_j}。例如,在输入数据(-2, 11, -4, 13, -5, -2)时其最大连续子数组之和为20.

请注意:本题目规定使用分治递归法求解问题,并且在计算结果的同时,请计算相应的递归调用总次数。

通过计算所有递归调用过程中的每个实例来获取其总数是可以实现的一种方法;这可以通过查看相关Fibonacci数列代码段中使用的全局计数器count来实现。

#include

整数变量count初始化为零

整数主函数

开始主程序块

整数变量n、m声明

定义一个名为fib的递归函数

调用fib函数计算结果并赋值给变量m

输出两个整数值:m和count

返回零作为程序退出值

递归函数体内部判断:如果(条件成立)则返回一

否则将fib函数在参数减一处与减二处的结果相加赋值给s

Input
第一行输入整数n(1<=n<=50000),表示整数序列中的数据元素个数;

第二行依次输入n个整数,对应

全部评论 (0)

还没有任何评论哟~