最大子列和问题
2015-11-30 22:09
232 查看
#include<stdio.h> int MaxSubseqSum1(int A[], int N); int MaxSubseqSum2(int A[], int N); int MaxSubseqSum3(int A[], int N); int Max3(int A, int B, int C); int DevideAndConquer(int A[], int left, int right); int main() { int MaxSum; int A[100000]; int N; int i; scanf("%d", &N); for(i=0; i<N; i++) { scanf("%d", &A[i]); } MaxSum = MaxSubseqSum3(A, N); printf("%d\n", MaxSum); return 0; } int MaxSubseqSum1(int A[], int N) { int ThisSum, MaxSum=0; int i, j, k; for(i=0; i<N; i++) { for(j=i; j<N; j++) { ThisSum = 0; for(k=i; k<=j; k++) { ThisSum += A[k]; } if(ThisSum > MaxSum) { MaxSum = ThisSum; } } } return MaxSum; } int MaxSubseqSum2(int A[], int N) { int ThisSum, MaxSum=0; int i, j, k; for(i=0; i<N; i++) { ThisSum = 0; for(j=i; j<N; j++) { ThisSum += A[j]; if(ThisSum > MaxSum) { MaxSum = ThisSum; } } } return MaxSum; } int DevideAndConquer(int A[], int left, int right) { if(left == right) { if(A[left] > 0) { return A[left]; } else { return 0; } } int MaxLeft=0, MaxRight=0, MaxLeftBorderSum=0, MaxRightBorderSum=0, LeftBorderSum=0, RightBorderSum=0; int i=0; int center = (left+right) / 2; MaxLeft = DevideAndConquer(A, left, center); MaxRight = DevideAndConquer(A, center+1, right); for(i=center; i>=left; i--) { LeftBorderSum += A[i]; if(LeftBorderSum > MaxLeftBorderSum) { MaxLeftBorderSum = LeftBorderSum; } } for(i=center+1; i<=right; i++) { RightBorderSum += A[i]; if(RightBorderSum > MaxRightBorderSum) { MaxRightBorderSum = RightBorderSum; } } return Max3(MaxLeft, MaxRight, MaxLeftBorderSum+MaxRightBorderSum); } int MaxSubseqSum3(int A[], int N) { DevideAndConquer(A, 0, N-1); } int Max3(int A, int B, int C) { return A>B ? A>C?A:C : B>C?B:C; }
相关文章推荐
- 仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout
- EF中的开放式并发(EF基础系列)
- 汇编学习笔记杂项
- POJ1163DP
- 浅谈 Nim 中的“接口”
- date转String
- 使用指针的方式遍历图像数据
- 什么是对象?
- 20135310陈巧然家庭作业汇总[3.56 3.67 6.23 6.39.6.40 6.41]
- 欢迎使用CSDN-markdown编辑器
- 值得深思:美国感恩节78.3%的网购来自iOS
- git常用命令及技巧
- 特征表达——统计、hash、embedding
- 浅谈 Nim 中的“接口”
- JAVAWEB之自定义TAG开发二
- 终极解释: java方法传递参数的方式
- 第二个Sprint ------第四、五、六、七天
- 黑马程序员--集合框架(collection)
- 如何做一个匀速旋转的轮子
- 容器总结——无序容器