dp之一维的最大字段和算法
2013-05-17 19:33
176 查看
/********************************************************************
*一维的最大字段和算法 O(n)
*功能: 求解给定数组的最大字段和,并求出最大子段的起始位置和结束位置。
*函数: intmaxsum(int *num, int len, int &s, int &e)
*参数: num[] //原始数据从0开始存储
* len //数据长度
* s //最大子段的起始位置 注意: 1是第一个位置不是0;
* t //最大子段的结束位置
*返回值:
* sum //数组的最大字段和
*********************************************************************/
#define MIN-1000000;
int maxsum(int *num,int len, int &s, int &e)
{
int i, b = 0;
int start = 1, end = 0;
int sum = MIN;
for ( i = 1; i <= len; i++) {
if (b >= 0) {
b += num[i];
end++;
} else {
b = num[i];
start = i;
end = i;
}
if (b > sum) {
sum = b;
*s = start;
*e = end;
}
}
return sum;
}
*一维的最大字段和算法 O(n)
*功能: 求解给定数组的最大字段和,并求出最大子段的起始位置和结束位置。
*函数: intmaxsum(int *num, int len, int &s, int &e)
*参数: num[] //原始数据从0开始存储
* len //数据长度
* s //最大子段的起始位置 注意: 1是第一个位置不是0;
* t //最大子段的结束位置
*返回值:
* sum //数组的最大字段和
*********************************************************************/
#define MIN-1000000;
int maxsum(int *num,int len, int &s, int &e)
{
int i, b = 0;
int start = 1, end = 0;
int sum = MIN;
for ( i = 1; i <= len; i++) {
if (b >= 0) {
b += num[i];
end++;
} else {
b = num[i];
start = i;
end = i;
}
if (b > sum) {
sum = b;
*s = start;
*e = end;
}
}
return sum;
}
相关文章推荐
- DP最大字段和算法
- hdu 1024Max Sum Plus Plus 最大M段字段和 单调优化DP 从一类单调性问题看算法的优化
- dp之二维的最大字段和算法
- DP算法之最大字段和 最长单调子序列相似借鉴之处
- 最大子矩阵问题;枚举行的组合,然后利用一维最大子段和的DP算法;
- 【poj 3056】The Bavarian Beer Party (区间DP+最大匹配不交叉的简单算法)
- POJ 1185 炮兵阵地 (状压DP || 最大团算法)
- HDU 1081 To The Max(二维最大字段和,转化为一维)
- dp 最大字段和 问题
- 数组问题之一维最大字段和问题<Java实现>
- 【HDU 1024】Max Sum Plus Plus(DP+滚动数组优化+最大m段字段之和)
- 51NOD 最大子字段和问题(DP入门)
- DP 分治 最大字段
- POJ 2479 Maximum sum(dp—求最大的两个不相交的字段和)
- 对网上最大字段和dp解法建模的勘误
- 【算法总结-DP】求子数组的最大和
- 蓝桥杯 算法训练 最大的算式(DP)
- 最大字段和小结 DP
- dp求最大子段(一维数组,二维数组)
- hdu 1024 经典DP 最大m字段和