首页 > $算法、数学与计算机 > 动态规划练习(一): 求数列中连续数字之和的最大值

动态规划练习(一): 求数列中连续数字之和的最大值

2009年10月23日 Zhaoren 发表评论 阅读评论

问题:

给你n个数a[1], a[2], …, a[n],(0[1]。

这个题目看上去与动态规划很类似,在于其解的特点。设数列的前 n 个数的最大值为 F(n),则:

dp_num_seqs_larger

证明从略。

代码如下:

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. 来源: 动态规划习题

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay

Related posts:

  1. 转:俞敏洪在北京大学2008年开学典礼上的演讲辞
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.