oibh吧 关注:20贴子:75
  • 5回复贴,共1

最大子段和

只看楼主收藏回复

请问大家,怎么用分治算法实现 最大子段和问题啊?有具体C代码更好 谢谢了!


1楼2011-10-13 13:22回复
    #include<iostream.h>
    int MaxSum(int a[],int left,int right)
    {
    int sum=0;
    if (left==right)
    { //如果序列长度为1,直接求解
    if (a[left]>0)
    sum=a[left];
    else
    sum=0;
    }
    else{
    int center=(left+right)/2;
    int leftsum=MaxSum(a,left,center);
    int rightsum=MaxSum(a,center+1,right);
    int s1=0;
    int lefts=0;
    for(int i=center;i>=left;i--)
    {
    lefts+=a[i];
    if(lefts>s1)
    s1=lefts;
    }
    int s2=0;
    int rights=0;
    for(int j=center+1;j<=right;j++)
    {
    rights+=a[j];
    if(rights>s2)
    s2=rights;
    }
    sum=s1+s2;
    if(sum<leftsum)sum=leftsum; //合并,在sum、leftsum和rightsum中取较大者
    if(sum<rightsum)sum=rightsum;
    }
    return sum;
    }
    void main()
    {
    int n,a[100],m,maxsum;
    cout<<"请输入整数序列的元素个数n:"<<endl;
    cin>>n;
    cout<<"请输入各元素的值(一共"<<n<<"个):"<<endl;
    for(m=1;m<=n;m++)
    cin>>a[m];
    maxsum=MaxSum(a,1,n);
    cout<<"整数序列的最大子段和是:"<<maxsum<<endl;
    }


    2楼2011-12-14 22:40
    回复
      2025-05-11 11:59:00
      广告
      谢谢咯


      3楼2011-12-27 15:21
      回复
        谢谢咯


        4楼2011-12-27 15:22
        回复
          不客气


          5楼2011-12-27 15:51
          回复
            新手请教传说中的oibh的网站在哪里
            网络搜的很多都404 not found,谢谢前辈


            6楼2012-02-20 15:47
            回复