zoukankan      html  css  js  c++  java
  • 求解最大连续子序列和问题

    方法一

    //求解最大连续子序列和问题
    #include<stdio.h>
    long maxSubSum(int a[],int n){
    	int i,j,k;
    	long maxSum=a[0],thisSum;
    	for(i=0;i<n;i++){
    		for(j=i;j<n;j++){
    			thisSum=0;
    			for(k=0;k<j;k++)
    				thisSum += a[k];
    			if(thisSum > maxSum)
    				maxSum = thisSum;
    		}
    	}
    }
    int main(){
    	int a[] = {-2,11,-4,13,-5,-2},n=6;
    	printf("a序列的最大连续子序列的和:%d",maxSubSum(a,n));	
    } 
    

    方法二

    #include<stdio.h>
    int maxSubSum(int a[],int n){
    	int i,j;
    	long maxSum=a[0],thisSum;
    	for(i=0;i<n;i++){
    		thisSum=0;
    		for(j=i;j<n;j++){
    			thisSum += a[j];
    			if(thisSum > maxSum)
    				maxSum = thisSum;
    		}
    	}
    }
    int main(){
    	int a[] = {-2,11,-4,13,-5,-2},n=6;
    	printf("a序列的最大连续子序列的和:%d",maxSubSum(a,n));	
    } 
    

      方法三

    #include<stdio.h>
    int maxSubSum(int a[],int n){
    	int i,maxSum=0,thisSum=0;
    	for(i=0;i<n;i++){
    		thisSum += a[i];
    		if(thisSum < 0)
    			thisSum = 0;
    		if(maxSum < thisSum)
    			maxSum = thisSum;
    	}
    } 
    int main(){
    	int a[] = {-2,11,-4,13,-5,-2},n=6;
    	printf("a序列的最大连续子序列的和:%d",maxSubSum(a,n));	
    } 
    

      分治法

      动态规划

     1 //动态规划
     2 #include<stdio.h>
     3 #define MaxN 20
     4 void maxSubSum(int a[],int b[],int n){    //求b数组 
     5     int j;
     6     b[0] = 0;
     7     for(j=1;j<=n;j++){
     8         if(b[j-1] + a[j] > a[j])
     9             b[j] = b[j-1] + a[j];
    10         else
    11             b[j] = a[j]; 
    12     } 
    13 }
    14 void disp(int a[],int b[],int n){
    15     int maxj,i,j,k;
    16     maxj = 1;
    17     for(j=2;j<=n;j++)
    18         if(b[j] > b[maxj])    maxj = j;
    19     for(k = maxj;k>=1;k--)
    20         if(b[k] <= 0)    break;
    21     printf("最大连续子序列和:%d
    ",b[maxj]);
    22     printf("所选子序列:");
    23     for(i = k+1;i<=maxj;i++)
    24         printf("%d ",a[i]);
    25     printf("
    "); 
    26 }
    27 int main(){
    28     int a[] = {0,-2,11,-4,13,-5,-2},n=6;
    29     int b[MaxN];
    30     maxSubSum(a,b,n);
    31     disp(a,b,n);
    32     return 0;
    33 } 
    View Code
  • 相关阅读:
    怪异恼人的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream问题的解决
    Spring3的quartz定时任务
    HTML模板
    SpringMVC 下载XLS文档的设置
    若想在当前路径下去运行非当前路径下的.class文件(即java可执行文件),该如何操作?
    霍金去世 享年76岁
    Github全面学习笔记
    Github上如何在Fork到的开源项目中提交Pull requests?
    Github中如何Fork开源项目?
    Java永久代去哪儿了
  • 原文地址:https://www.cnblogs.com/Hqx-curiosity/p/12146743.html
Copyright © 2011-2022 走看看