动态规划之最大子段和

来源:互联网 发布:windows 9 编辑:程序博客网 时间:2024/06/02 10:41
若最大子段和记:b[j]=max(a[i]+a[i+1]+..+a[j]),其中1<=i<=j,并且1<=j<=n。则所求的最大子段和为max b[j],1<=j<=n。
由b[j]的定义可易知,当b[j-1]>0时b[j]=b[j-1]+a[j],否则b[j]=a[j]。故b[j]的动态规划递归式为:
b[j]=max(b[j-1]+a[j],a[j]),1<=j<=n。


实现代码:

public static void maxsub(int []a)

    {
        int sum=0, b=0,start=0,end=0,n=a.length;
        for(int i=1;i<=n;i++)
        {
            if(b>0)
                b=b+a[i-1];
            else
            {
                b=a[i-1];
                start=i;
            }
            if(b>sum)
            {
                sum=b;
                end=i;
            }
        }
        System.out.println("the max value:");
        System.out.println("start="+start+" end="+end);
    }

0 0