3664-顺序表应用7:最大子段和之分治递归法
2017-09-23 00:33
459 查看
#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> using namespace std; const int MAX = 50000+10; int maxx, cnt, n, a[MAX]; int maxsum(int l, int r) { int sum = 0; cnt++; if(l==r) { if(a[l]>=0)sum = a[l]; else sum = 0; } else { int mid = (l+r)/2; int leftsum = maxsum(l, mid); int rightsum = maxsum(mid+1, r); int s1, s2, ss; s1 = ss = 0; for(int i = mid; i>=l; --i) { ss+=a[i]; if(ss>s1)s1 = ss; } s2 = ss = 0; for(int i = mid+1; i<=r; ++i) { ss+=a[i]; if(ss>s2)s2 = ss; } sum = s1+s2; sum = max(sum, leftsum); sum = max(sum, rightsum); } return sum; } int main() { scanf("%d",&n); for(int i = 0; i<n; ++i) scanf("%d", &a[i]); cnt = 0; maxx = maxsum(0, n-1); printf("%d %d\n", maxx, cnt); return 0; }
4000
相关文章推荐
- 3664 顺序表应用7:最大子段和之分治递归法
- SDYTACM 顺序表应用7:最大子段和之分治递归法
- sdut acm oj 顺序表应用7:最大子段和之分治递归法
- sdutacm-顺序表应用7:最大子段和之分治递归法
- 【分治递归法】顺序表应用7:最大子段和之分治递归法
- 数据结构顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法
- 顺序表应用7:最大子段和之分治递归法