zoukankan      html  css  js  c++  java
  • 采用分治法求最大子列

     数据结构第一个编程题:用分治法求最大子列(参考陈越《数据结构》)

    代码如下:
    #include<stdio.h>
     /*
    	Name: get the maxsubsequence
    	Copyright: 
    	Author: demosees
    	Date: 22/03/17 11:44
    	Description:  (by devc++)
    */
    
     int Max3(int A,int B,int C)//求三个数中的最大值 
     {
     	return A>B?A>C?A:C:B>C?B:C; 
     }
     int DivideAndConquer(int List[],int left,int right)//分治策略 
     {
     	int MaxLeft,MaxRight;
     	int MaxLeftSum,MaxRightSum;
     	int LeftSum,RightSum;
     	int center,i;
     	  
     	if(left==right)//递归的终止条件 
     	   if(List[left]>0) return List[left];
     	     else return 0;
     	    
    		 center=(left+right)/2; //分 
     	     
       MaxLeft=DivideAndConquer(List,left,center);//求左边的最大值 
       MaxRight=DivideAndConquer(List,center+1,right);//求右边的最大值 
       
       MaxLeftSum=0;LeftSum=0;//从中间开始往两边求 
       for(i=center;i>=left;i--){
       
          LeftSum=LeftSum+List[i];
           if(LeftSum>MaxLeftSum)    //从中间往左边扫描 
                MaxLeftSum=LeftSum;
         }       
       
       MaxRightSum=0;RightSum=0;
       for(i=center+1;i<=right;i++){
       
          RightSum=RightSum+List[i];
           if(RightSum>MaxRightSum)  //从中间往右边扫描 
                MaxRightSum=RightSum;
         }    
    	 return Max3(MaxLeft,MaxRight,MaxLeftSum+MaxRightSum);//将三个结果合在一起选取最大值 
    	         
    }
    
    int MaxSubseqSum3(int List[],int N)//把借口转换过去 
    {
    	return DivideAndConquer(List,0,N-1);
    }
    
        int main()
     {
     	 int subsque[100000],n,j;//输入n个随机的数 
     	 scanf("%d",&n);/*首先输入数的个数*/ 
     	 for(j=0;j<n;j++)
     	    scanf("%d",&subsque[j]);
     	   
     	    printf("%d",MaxSubseqSum3(subsque,n));
         	return 0;
     }	     
     
    


  • 相关阅读:
    A1132 Cut Integer (20分)
    A1131 Subway Map (30分)
    A1130 Infix Expression (25分)
    A1129 Recommendation System (25分)
    A1128 N Queens Puzzle (20分)
    arm指令集
    韦东山视频地址
    汇编知识
    emacs 使用教程
    ip
  • 原文地址:https://www.cnblogs.com/jacksin/p/8830231.html
Copyright © 2011-2022 走看看