您的位置:首页 > 编程语言 > Java开发

动态规划例题:最大连续子序列和

2018-03-20 18:26 274 查看
问题:
给定一个数字序列a1, a2,..., an, 求i,j(1<=i<=j<=n),使得ai + ... + aj 最大,
输出这个最大和。
输入:6
          -2 11 -4 13 -5 -2
输出:20

解:public class Main {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int
;
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int[] dt = new int
;// 保存各个点的最大连续子序列和
// dt[i]表示以a[i]作为末尾的连续序列的最大和
dt[0] = a[0];// 边界,a[0]就是在0点连续子序列和的最大值
for (int i = 1; i < n; i++) {
// 状态转移方程
dt[i] = Math.max(dt[i - 1] + a[i], a[i]);
}
int num = 0;// 最大连续子序列和的结尾那个点的下标
for (int i = 0; i < n; i++) {// 找出dt[]中值最大的那个点的下标
if (dt[i] > dt[num]) {
num = i;
}
}
System.out.println(dt[num]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java