最大子段和
2015-10-11 19:53
381 查看
#include "stdio.h" #include "stdlib.h" #include "math.h" #include "string.h" #define N 100 int max(int a, int b) { return a>b?a:b; } int MaxSum(int a , int left, int right) { //返回数组a[left:right]最大区间和 if(left == right) return a[left]>0?a[left]:0; int mid = (left+right)/2; //中点 int sum1 = MaxSum(a, left, mid); //递归求左段最大和 int sum2 = MaxSum(a, mid+1, right); //递归求有段最大和 /*求左子段中的最优子段和值s1,由中点开始,自右向左搜索 */ int s1 = 0; int lefts = 0; int i; for(i=mid; i>=left; i--) { s1 += a[i]; if(s1 > lefts) lefts = s1; } /*求右子段中的最优子段和值s2,由中点开始,自左向右搜索 */ int s2 = 0; int rights = 0; for(i=mid+1; i<=right; i++) { s2 += a[i]; if(s2 > rights) rights = s2; } int sum3 = rights + lefts; int sum12 = max(sum1, sum2); return max(sum3, sum12); } int main() { int a ; printf("输入元素个数:"); int n; scanf("%d", &n); int i; for(i=0; i<n; i++) scanf("%d", &a[i]); int sum = MaxSum(a, 0, n-1); printf("%d\n", sum); return 0; }
相关文章推荐
- hdu--2191
- 我的涨分日记(二)——BestCoder Round #59
- 正方形
- 优势并不明显 小米缘何要生产笔记本电脑?(小米其实还是通过硬件赚钱,年利润25亿)
- leetcode5 Longest Palindromic Substring
- BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)
- 网 卡 和 IP 的 应 用
- 测试用例思考
- Android 使用CursorLoader获取手机短信
- Linux文件系统操作与磁盘管理,转载自实验楼
- Asp.net笔记(原创)
- Nginx+Keepalived实现站点高可用
- Java File类总结和FileUtils类
- 学习kvm
- Python源码剖析笔记7-类机制
- 打印100---200之间的素数
- spring事务的隔离级别配置
- windows下划分逻辑分区
- 九九乘法表
- 一“结”(9)