#include <iostream>
using namespace std;
//蛮力法
int maxSum_1(int a[], int n, int &L, int &R)
{
int maxSum = 0;
int sum = 0;
int i, j;
for (i = 0; i < n; i++) //从第一个数开始算起
{
for (j = i + 1; j < n; j++) //从i的第二个数开始算起
{
sum = a[i];
a[i] += a[j];
if (a[i] > sum)
{
sum = a[i]; //每一趟的最大值
}
}
if (sum > maxSum) //取所有的最大值
{
maxSum = sum;
L = i;
R = j;
}
}
return maxSum;
}
//分治法
int maxSum_2(int a[], int low, int high, int &L, int &R)
{
int mid;
int sum = 0; //记录最大子段
int leftsum = 0; //记录左面的最大子段
int rightsum = 0; //记录右面的最大子段
int rs = 0; //记录中间部分右面子段的最大子段
int ls = 0; //记录中间部分左面的最大子段
int lefts = 0; //暂时记录从mid到最左面的数据
分别用穷举法、分治法、动态规划法编程实现最大子段和问题
最新推荐文章于 2024-07-12 10:45:15 发布