• 最大连续子段和


    最大连续子段和首先想到就是动态规划

    #include<stdio.h>
    #define LEN 100001
    int t ,num[LEN], res[LEN], start, end, max = -100000000;
    
    int read_data(){
        int i;
        if(scanf("%d", &t) == EOF) return 0;
        if(t <= 20 && t >= 1){
            scanf("%d", &num[0]);
            if(num[0] >= 1 && num[0] <= 100000)
                for(i = 1; i <= num[0]; i++) 
                    scanf("%d", &num[i]);
        }
        return 1;
    }
    
    void max_sum(){
        int i, j;
        for(i = 1; i <= num[0]; i++){
            res[i] = num[i];
            for(j = i + 1; j < num[0]; j++){
                res[j] = num[j] + res[j-1];
                if(res[j] > max){
                    max = res[j];
                    end = j;
                    start = i;
                }
            }
        }
    }

     但不许要这么麻烦,只要定义三个变量,一个表示最大的字段和,一个表示目前求得的字段和,一个表示目前子段的开始位置,从a0开始向右扫描,不断地加,当目前子段和大于最大的时更新最大子段和,若是当加到ai时和小于或等于0时,则从ai+1从新开始加起。代码如下

    #include<stdio.h>
    
    int main()
    {
     int i,j,k=0,t,n,a,start,end,max,temp;
     scanf("%d", &t);
     for(i=0;i<t;i++)
     {
      max=-t,temp=start=k=0;
     scanf("%d", &n);
      for(j=0;j<loop2;j++)
      {
        scanf("%d", &a);
       temp+=a;
       if(temp>max)
       {
        start=k;
        end=j;
        max=temp;
       }
       if(temp<0)
       {
        temp=0;
        k=j+1;
       }
      }
      printf("%d %d %d", max, start, end );
     }
     return 0;
    }
  • 相关阅读:
    Django 登录页面重定向
    python 调试命令
    错误
    错误
    图算法之图的创建
    Git 常用命令详解(三)
    Git 常用命令详解(二)
    如何提问
    项目常用jquery/easyui函数小结
    我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用)
  • 原文地址:https://www.cnblogs.com/yujinghui/p/2951496.html
Copyright © 2020-2023  润新知