分治法之求最大连续子序列和
2017-03-05 11:52
225 查看
对原问题有如下解
1.最大子序列在数组中点的左边
2.最大子序列在数组中点的右边
3.最大子序列跨越数组中点
1.最大子序列在数组中点的左边
2.最大子序列在数组中点的右边
3.最大子序列跨越数组中点
#include<iostream> using namespace std; int FIND_MAX_CROSSING_SUBARRAY(int a[],int low,int high) { int mid = (low+high)/2; int i = mid; int j = mid+1; int left_sum = 0; int right_sum = 0; int sum = 0; while(i>=low){ sum += a[i]; if(sum>left_sum) left_sum = sum; i--; } sum = 0; while(j<=high){ sum += a[j]; if(sum>right_sum) right_sum = sum; j++; } return left_sum+right_sum; } int FIND_MAXIMUM_SUBARRAY(int a[],int low, int high) { if(low == high) return a[low]; int mid = (low+high)/2; int left_sum = FIND_MAXIMUM_SUBARRAY(a,low,mid); int right_sum = FIND_MAXIMUM_SUBARRAY(a,mid+1,high); int cross_sum = FIND_MAX_CROSSING_SUBARRAY(a,low,high); if(cross_sum>left_sum && cross_sum>right_sum) return cross_sum; if(left_sum>cross_sum && left_sum>right_sum) return left_sum; if(right_sum>left_sum && right_sum>cross_sum) return right_sum; } int main() { int a[10] = {-1,0,23,414,-231,11,4234,-131323,1321,321}; cout<<FIND_MAXIMUM_SUBARRAY(a,0,9); }
相关文章推荐
- 使用分治法解最大连续子序列和问题
- 分治法求数组最大连续子序列的和
- 《github一天一道算法题》:分治法求数组最大连续子序列和
- 《github一天一道算法题》:分治法求数组最大连续子序列和
- HDU1003(最大连续子序列)
- HDOJ-1231 最大连续子序列[DP入门]
- HDU1003最大连续子序列和
- 最大连续子序列和
- 最大连续子序列
- HDU-1231-最大连续子序列(Java+DP动态规划)
- 题目1011:最大连续子序列
- JAVA实践分治法最大连续子序列求和
- 最大连续子序列----DP动态规划
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- 【基础练习】【线性DP】codevs2622 数字序列(最大连续子序列和)题解
- 【DP经典系列】最大连续子序列和
- 最大连续子序列和
- --hdu 1231 最大连续子序列(动态规划)
- [珠玑之椟]字符串和序列:左移、哈希、最长重复子序列的后缀数组解法、最大连续子序列
- hdu 1003 (Max Sum) hdu 1231(最大连续子序列)