#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ARRAY_SIZE 1000
int buf [ARRAY_SIZE];
int main()
{
srand((unsigned int )time(0));
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)buf[i]=rand()%100-10;
for(i=1;i<=n;i++)printf("%d ",buf[i]);
printf("\n");
//creat random value of buffer and print
//max subsequence sum
long int max_sum=0;
int start=1,end,rs;
for(i=1;i<=n;i++)
{
long int this_sum=0;
start=i;
for(j=i;j<=n;j++)
{
this_sum+=buf[j];
if(this_sum>max_sum)
{
max_sum=this_sum;
rs=start;
end=j;
}
}
}
printf("rs=%d,end=%d,max_sum=%ld\n",rs,end,max_sum);//print result
}
}

//O(n*n)   brute-force

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ARRAY_SIZE 1000
int buf [ARRAY_SIZE];
long int max3(long int a,long int b,long int c)
{
return a>b?(a>c?a:c):(b>c?b:c);
}
long int max_subsequence_sum(int left,int right)
{
if(left==right)
{
if(buf[left]>0)return buf[left];
else return 0;
}
int mid=(left+right)/2;
long int max_left_sum= max_subsequence_sum(left, mid);
long int max_right_sum= max_subsequence_sum(mid+1, right);
int i,j;
long int max_leftbordersum=0,leftbordersum=0;
for(i=mid;i>=left;i--)
{
leftbordersum+=buf[i];
if(leftbordersum>max_leftbordersum) max_leftbordersum=leftbordersum;
}
long int max_rightbordersum=0,rightbordersum=0;
for(i=mid+1;i<=right;i++)
{
rightbordersum+=buf[i];
if(rightbordersum>max_rightbordersum) max_rightbordersum=rightbordersum;
}
return max3(max_left_sum,max_right_sum,max_rightbordersum+max_leftbordersum);
}
int main()
{
srand((unsigned int )time(0));
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)buf[i]=rand()%100-10;
for(i=1;i<=n;i++)printf("%d ",buf[i]);
printf("\n");
//creat random value of buffer and print
//max subsequence sum
long int result=max_subsequence_sum(1,n);
printf("result=%ld\n",result);//print result
}
}

//O(nlgn)divide and conquer

//the pity is no sign of start and end of max subsequence sum

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ARRAY_SIZE 1000
#define RANDOM_SIZE 100
int buf [ARRAY_SIZE];
int main()
{
srand((unsigned int )time(0));
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)buf[i]=rand()%RANDOM_SIZE-RANDOM_SIZE/2;
for(i=1;i<=n;i++)printf("%d ",buf[i]);
printf("\n");
//creat random value of buffer and print
//max subsequence sum
long int max_sum=0;
int start=1,end,rs;
long int this_sum=0;
for(i=1;i<=n;i++)
{
this_sum+=buf[i];
if(this_sum>max_sum)
{
max_sum=this_sum;
rs=start;
end=i;
}
else
{
this_sum=0;
start=i+1;
}
}
printf("rs=%d,end=%d,max_sum=%ld\n",rs,end,max_sum);//print result
}
}

//O(n)

CLRS:Max_sunsequence_sum O(n*n) O(nlgn) O(n)的更多相关文章

  1. 递归O(NlgN)求解逆序数

    导言 第一次了解到逆序数是在高等代数课程上.当时想计算一个数列的逆序数直觉就是用两重循环O(n^2)暴力求解.现在渐渐对归并算法有了一定的认识,因此决定自己用C++代码小试牛刀. 逆序数简介 由自然数 ...

  2. 一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS.

    一种最坏情况线性运行时间的选择算法 - The missing worst-case linear-time Select algorithm in CLRS. 选择算法也就是求一个无序数组中第K大( ...

  3. [Algorithm] 如何正确撸<算法导论>CLRS

    其实算法本身不难,第一遍可以只看伪代码和算法思路.如果想进一步理解的话,第三章那些标记法是非常重要的,就算要花费大量时间才能理解,也不要马马虎虎略过.因为以后的每一章,讲完算法就是这样的分析,精通的话 ...

  4. 经典算法分析:n^2与nlgn

    冒泡.插入.选择排序的时间复杂度为O(n2) Arrays.sort()时间复杂度为nlgn 具体算法实现代码: package recursion; import java.util.Arrays; ...

  5. 算法导论(CLRS)答案

    算法导论(CLRS)答案 Chapter Section I 1 2 p II 1 2 3 p III 1 2 p IV 1 2 3 4 p V 1 2 3 4 p VI 1 2 3 4 5 p VI ...

  6. POJ 3670 Eating Together 二分解法O(nlgn)和O(n)算法

    本题就是一题LIS(最长递增子序列)的问题.本题要求求最长递增子序列和最长递减子序列. dp的解法是O(n*n),这个应该大家都知道.只是本题应该超时了. 由于有O(nlgn)的解法. 可是因为本题的 ...

  7. 低水平选手的自我救赎 (1)CLRS Exercise 16.5-2

    题目大意 给定正整数 $n$ 和一个由 $m$ 个正整数构成的可重集合 $A$,满足 $\forall a\in A, a\le n$ 且 $m\le n$ . 定义 $N_t(A) = |\{a\i ...

  8. 【Bell-Ford 算法】CLRS Exercise 24.1-4,24.1-6

    本文是一篇笔记,大部分内容取自 CLRS 第三版,第 24.1 节. Exercise 24.1-4 Modify the Bellman-Ford algorithm so that it sets ...

  9. poj1631Bridging signals(最长单调递增子序列 nlgn)

    Bridging signals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12251   Accepted: 6687 ...

随机推荐

  1. adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)

    今天把玩手头的那部Android手机时碰到一个问题,即因为权限问题无法将文件复制到/system/和/data/分区中,经过一番折腾后,算是解决了,在此记录一笔.本方所涉及到的命令输入,均用斜体字表示 ...

  2. 最大熵的Java实现

    这是一个最大熵的简明Java实现,提供训练与预测接口.训练采用GIS训练算法,附带示例训练集.本文旨在介绍最大熵的原理.分类和实现,不涉及公式推导或其他训练算法,请放心食用. 最大熵理论 简介 最大熵 ...

  3. curl命令使用小结[转]

    curl命令有不少小技巧,linux下测试确实很方便.转http://blog.csdn.net/zhangliang_571/article/details/26379777 1.开启gzip请求c ...

  4. spring外部化配置

    例如 <bean id="dataSource" class="....." p:username="aa" p:password=& ...

  5. 深入ThreadLocal之二

    概述 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资 ...

  6. mysql基础语法之(全文索引)

    1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()…AGAIN ...

  7. Linux重置mysql密码(转载)

    From:http://hi.baidu.com/mcspring/item/6358ee27afe7e1c8a5275ab7 首先,必须拥有MySQL操作的所有权限: 其次,停止MySQL服务: / ...

  8. Java多线程之新类库中的构件DelayQueue

    DelayQueue 是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走.这种队列是有序的,即队头对象的延迟到期时间最长.注意:不 ...

  9. android之RatingBar控件用法

    MainActivity.java package com.example.mars_2500_ratingbar; import android.support.v7.app.ActionBarAc ...

  10. Python & MapReduce

    使用Python实现Hadoop MapReduce程序 原文请参考: http://blog.csdn.net/zhaoyl03/article/details/8657031/ 下面只是将mapp ...