最長子段和(動態規劃)
阿新 • • 發佈:2018-11-10
package 實驗三; public class 最大子段和 { public static void main(String[] args) { C c=new C(); c.run(); c.show(); } } class C{ int [] a= {-2,11,-4,13,-5,-2}; //資料 int n=a.length; int sum=0; //最大子段和 int b=0; int i=0; int besti=0; //最大子段和的開始位置 int bestj=0; //最大子段和的結束位置 void run() { sum=MaxSum(n,a); } int MaxSum(int n, int a[]) { for (int j=0; j<n; j++) { if (b>0) b+= a[j]; else { b=a[j];i=j; } if (b > sum) { sum=b; besti=i; bestj=j; } } return sum; } void show() { System.out.print("陣列a為:"); for(i=0;i<n;i++) { System.out.print(a[i]+" "); } System.out.println(); System.out.println("最大子段和為:"+sum); System.out.println("最大子段和的開始位置為:"+a[besti]); System.out.println("最大子段和的結束位置為:"+a[bestj]); } }
- 最大子段和
給定由n個整數(可能有負整數)組成的序列(a1,a2,…,an),最大子段和問題要求該序列形如的最大值(1<=i<=j<=n),當序列中所有整數均為負整數時,其最大子段和為0。