动态规划——最大子段和

对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大。如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。

#include<stdio.h>
//找到数组b中最大的值 
int max(int *b,int n){
    int max=b[0];
    for(int i=0;i<n;i++){
        if(b[i]>max){
            max=b[i];
        }
    }
    return max;
}
//计算i之前的最大的字段和 
void maxlength(int *a,int n){
    int b[n];
    b[0]=a[0];
    for(int i=1;i<n;i++){
        if(a[i]+b[i-1]>a[i]){
            b[i]=a[i]+b[i-1];
        }
        else{
            b[i]=a[i];
        }
    } 
    printf("%d",max(b,n));
}
int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    maxlength(a,n);
}

 

posted @ 2021-05-27 15:15  ....陈陈陈陈  阅读(175)  评论(0)    收藏  举报