最大子段和问题的分治算法和动态规划算法

本文探讨如何使用分治算法和动态规划策略解决最大子段和问题。当序列分为两等份时,最大子段和可能出现三种情况,并提供了一种分治算法的思路,以及动态规划公式`b[j]=max{b[j-1]+a[j],a[j]}`来求解序列中各子段的最大值。" 125436643,6849979,3GPP协议标准查找与下载指南,"['网络', '3GPP', '通信协议']
摘要由CSDN通过智能技术生成

如果将所给的序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有三种情形:(当所有整数均为负数时定义其最大子段和为0)

1)a[1:n]的最大子段和与a[1:n/2]的最大子段和相同;

2)a[1:n]的最大子段和与a[n/2:n]的最大子段和相同;

3)a[1:n]的最大子段和为Σ(k=i~j)ak,且1<=i<=n/2,n/2+1<=j<=n;

(1)(2)可递归求得。对于(3),容易看出a[n/2]与a[n/2+1]在最优子序列中。据此可以设计出分治算法如下:

#include<iostream>
using namespace std;

int MaxSubSum(int *a,int left,int right)
{
	int i,leftsum,rightsum,lefts,rights,center,s1,s2;
	int sum=0;

	if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值