动态规划练习(一): 求数列中连续数字之和的最大值
问题:
给你n个数a[1], a[2], …, a[n],(0
[1]。
这个题目看上去与动态规划很类似,在于其解的特点。设数列的前 n 个数的最大值为 F(n),则:

证明从略。
代码如下:
package com.feihoo.test; public class MaxSequenceValue { static int[] nums = { 2, 4, -3, 9, 30, -30, 20, 0, 34, -2, -45, 12, -8, 11 }; public static void main(String[] args) { int minLen = 2; int maxLen = 4; int[] m = new int[nums.length]; m[minLen - 1] = 0; for (int i = minLen; i < nums.length; i++) compute(i, m, minLen, maxLen); int largest = m[minLen]; for (int i = minLen + 1; i < nums.length; i++) if (largest < m[i]) largest = m[i]; System.out.println(largest); } private static void compute(int n, int[] m, int minLen, int maxLen) { m[n] = m[n - 1]; for (int len = minLen; len < maxLen && n - len >= 0; len++) { int re = nums[n]; for (int i = n - 1; i > n - len; i--) re += nums[i]; if (m[n] < re) m[n] = re; } } }
参考:
1. 来源: 动态规划习题
Related posts:
最近评论