题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231
题目类型:动态规划
题解:
把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();
}
}