zoukankan      html  css  js  c++  java
  • 最大子列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;
     }
    

  • 相关阅读:
    计算机开机启动原理
    行业术语缩写参照表
    Ghost 克隆工具使用教程
    Windows 系统常用快捷键
    MindMaster使用技巧
    工作打印机型号驱动汇总
    Android手机免ROOT卸载系统内置应用
    RTX腾讯通聊天消息备份
    Work TEL
    成功实施ITSM SLA的5个步骤
  • 原文地址:https://www.cnblogs.com/jacksin/p/8830230.html
Copyright © 2011-2022 走看看