• 最大子列2


    用递归得到最大子列并且标记最大子列的第一个和最后一个的数字

    代码如下:
    #include<stdio.h>
     /*
    	Name: maximum subsequence 2
    	Copyright: 
    	Author: demosees
    	Date: 22/03/17 12:27
    	Description: find the largest sum, together with the first and the last numbers of the maximum subsequence
    */
    
     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[10000],n,j,k,max,sum,flag=1;
     	 scanf("%d ",&n);
     	 for(j=0;j<n;j++)
     	    scanf("%d",&subsque[j]);
     	    
     	    max=MaxSubseqSum3(subsque,n);
     	if(max==0)    
     	    printf("%d %d %d",0,subsque[0],subsque[n-1]);
     	 else   
    	  for(k=0;k<n&&flag;k++){
     	      sum=0;
     	    
    		  for(j=k;j<n&&flag;j++){
    		  
    		       sum=sum+subsque[j];
    			   if(sum==max)
    			   {
    			    printf("%d %d %d",sum,subsque[k],subsque[j]);
    			    flag=0;
    				 }
     	        }
     	    }	    
     	    
         	return 0;
     }
    

  • 相关阅读:
    Kubernetes+Federation打造跨多云管理服务
    idou老师教你学istio 31:Istio-proxy的report流程
    《软件工程》课程总结(补)
    《软件工程》课程总结
    十二周# 学习进度总结
    十一周# 学习进度总结
    十周# 学习进度总结
    九周# 学习进度总结
    八周# 学习进度总结
    团队项目——编写项目的Spec
  • 原文地址:https://www.cnblogs.com/jacksin/p/8830230.html
Copyright © 2020-2023  润新知