您的位置:首页 > 产品设计 > UI/UE

分治法Devide-and 4000 -Conquer

2015-10-02 16:08 441 查看
分治算法一般分为3个步骤:

1.划分问题:把问题的实例划分为子问题

2.递归求解:递归解决子问题

3.合并问题:合并子问题的解得到原问题的解

最大连续和问题

#include<iostream>
using namespace std;
int maxsum(int* A, int x, int y){
int i, m, v, L, R, max;
if(y-x == 1) return A[x]; //只有一个元素,直接返回
m = x + (y-x) / 2; //分治第一步:划分成[x,m)和[m,y)
//分治第二步,递归求解
if(maxsum(A, x, m) > maxsum(A, m, y)){
max = maxsum(A, x, m);
}else{
max = maxsum(A, m, y);
}
//分治第三步:合并(1)----从分界点开始往左的最大连续和L
v = 0; L = A[m-1];
for(i = m-1; i >= x; i--){
v += A[i];
if(L < v){
L = v;
}
}
//分治第三步:合并(2)----从分界点开始往右的最大连续和R
v = 0; R = A[m];
for(i = m; i < y; i++){
v += A[i];
if(R < v){
R = v;
}
}
if(max > (L+R)){
return max;
}else{
return (L+R);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  分治 最大连续和