动态规划例题:最大连续子序列和
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]);
}
}
给定一个数字序列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]);
}
}
相关文章推荐
- 动态规划:最大连续子序列乘积
- 最大连续子序列和:动态规划经典题目(2)
- 动态规划:最大连续子序列和
- 动态规划:最大连续子序列乘积
- 【练习09】简单动态规划 1001 最大连续子序列
- 动态规划专题讲义之最大连续子序列之和
- 动态规划经典题目:最大连续子序列和
- 动态规划之最大连续子序列
- 求最大连续子序列的和,两种解法:动态规划 & Kadane算法
- 02动态规划基础---最大连续子序列的和
- 最大连续子序列和 分治思想和动态规划思想
- 1003---求最大连续子序列和的动态规划问题
- 最大连续子序列和,乘积,最长递增子串,最长公共子串,子序列等问题(动态规划等)
- 动态规划经典题目:最大连续子序列和
- HDU 1231(最大连续子序列)动态规划-最大连续子序列和
- 动态规划专题—最大连续子序列和—A1007
- hdu1231最大连续子序列(简单的动态规划)
- 动态规划---hdu1231---最大连续子序列
- 动态规划_题目1011:最大连续子序列
- 最大连续子序列和:动态规划经典题目