HDU 1231 最大連續子序列(java)
阿新 • • 發佈:2018-12-19
題目型別:動態規劃
題解: 把n=0和全為負數的情況作為兩種特殊情況處理。 b[i]表示從c[i]到i中的序列和。當b[i-1]<0時c[i]記為當前i值。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
while(kb.hasNext()) {
int n=kb.nextInt();
if(n==0) {
break;
}
int a[]=new int [n];
int b[]=new int[n];
int c[]=new int[n];
boolean pd=false;
for(int i=0;i<n;i++) {
a[i]=kb.nextInt();
if(a[i]>=0)pd=true;
}
if(!pd) {
System.out.println(0+" "+a[0]+" "+a[n-1]);
continue;
}
b[0]=a[0];
for(int i=1;i<n;i++) {
if(b[i-1]>0) {
b[ i]=b[i-1]+a[i];
c[i]=c[i-1];
}else {
b[i]=a[i];
c[i]=i;
}
}
int max=0;
for(int i=0;i<n;i++) {
if(b[i]>b[max])max=i;
}
System.out.println(b[max]+" "+a[c[max]]+" "+a[max]);
}
kb.close();
}
}