`
mabusyao
  • 浏览: 252572 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

存储中间计算结果的动态规划算法

 
阅读更多

public class RodCutting {

	public static void main(String[] args) {
		int n = 5;
		int[] prices = new int[]{1, 4, 5, 6, 8};
		long start = System.currentTimeMillis();
		System.out.println(cut(n, prices));
		long end = System.currentTimeMillis() - start;
		System.out.println(end);
	}
	
	private static Map<Integer, Integer> intermidum = new HashMap<Integer, Integer>();
	private static int cut(int n, int[] prices) {
		if(n == 1) {
			//System.out.println("One one inch, no cut");
			return prices[0];
		} else if (intermidum.containsKey(n)) {
			return intermidum.get(n);
		} else {
			int price = prices[n - 1];
			int index = 0;
			for(int i = 1; i < n; i++) {
				int tmp = prices[i - 1] + cut(n - i, prices);
				if(tmp > price) {
					price = tmp;
					index = i;
				}
			}
			
			if(price == prices[n - 1]) {
				//System.out.println("No cut for the "+ n +" inches.");
			} else {
				System.out.println("Cut to " + index  + " and " + (n - index) + " inches.");
			}
			
			intermidum.put(n, price);
			
			
			return price;
			
		}
	}
}

 

吐血归来,小帖一篇代码,恢复中。。。

分享到:
评论

相关推荐

    动态规划算法的应用

    动态规划算法的核心思想是将问题分解成小问题,然后使用Memoization技术将中间结果存储起来,以便后续问题的解决。 在本实验中,我们将使用动态规划算法来解决两个经典的问题:数塔问题和最长单调递增子序列问题。 ...

    动态规划算法实现投资问题

    在算法中,我们可以使用以下变量来存储中间结果: * f[i][x]:前i个工程项目分配x份资源时可获得的最大利润 * d[i][x]:使f[i][x]最大时,第i个工程项目分配的资源份额 * g[i]:只分配给前i个工程项目时可得到的...

    动态规划算法比对蛋白质序列

    在Perl语言中实现动态规划算法,开发者通常会创建一个二维数组来存储中间计算得分,并逐步填充这个数组。算法的核心步骤包括初始化边界条件,然后按照特定的得分规则更新数组的每一行和每一列。在填充完成后,回溯...

    算法设计与分析之动态规划算法学习指导

    5. **记录中间结果**:采用备忘录方法存储中间结果,避免重复计算。 6. **追踪问题的解**:通过标记函数追踪从子问题到原问题的最优路径。 #### 七、动态规划与其他算法的区别 - **与分治法的区别**:分治法将...

    动态规划解决TSP问题用动态规划算法求解TSP,数据为Solomon数据集的c101文件读取,可视化路径图,用图展示每次迭代的最

    在实际应用中,动态规划算法对于较小规模的TSP问题效果良好,但随着问题规模的增大,其计算复杂度会急剧增加,导致计算时间过长。对于大规模问题,通常会采用其他算法,如近似算法、遗传算法或模拟退火等。在使用...

    动态规划算法笔记总结ZIP分享

    动态规划的实现通常涉及递归和迭代两种方式,Java中常用ArrayList或ArrayList二维数组来存储和更新中间状态。 在学习动态规划的过程中,整理笔记是非常有益的,可以帮助我们更好地理解和记忆各种问题的解法。"动态...

    动态规划算法及其一些例子

    标题中的“动态规划算法及其一些例子”意味着我们将探讨动态规划的基本原理,并通过具体的例子来加深理解。动态规划通常有以下三个关键步骤: 1. **定义状态**:明确表示问题的中间阶段,例如,斐波那契数列中的第n...

    动态规划实验报告

    本实验报告主要探讨了使用动态规划算法解决计算二项式系数的问题。实验者刘春云,专业为软件工程,通过这个实验学习并应用了动态规划这一核心的计算机科学概念。实验指导教师为赵晓平,实验时间为2012年2月21日。 *...

    利用动态规划算法实现矩阵连乘

    动态规划的核心思想是将大问题分解为小问题,并存储中间结果以避免重复计算。对于矩阵连乘问题,我们可以构建一个二维数组dp[i][j],表示矩阵Ai到Aj(包含两端)的最优乘法次数。这里,i ,因为我们要找到所有可能的...

    动态规划算法源程序

    因此,动态规划算法通常采用自底向上的方式,存储并利用已解决的子问题的解,避免了重复计算,提高了效率。 在"DYNPROG.M"文件中,我们可以期待找到以下几个方面的内容: 1. **状态定义**:首先,动态规划算法需要...

    DP_立体匹配_动态规划算法_dp算法_

    动态规划是一种优化技术,常用于解决具有重叠子问题和最优子结构的问题,它通过构建一个表格来存储中间结果,避免了重复计算。 立体匹配的目标是找到两幅图像(通常为同一场景的左右视图)中对应像素的最佳匹配。这...

    动态规划算法-动态规划算法的基本思想.zip

    动态规划的核心理念是避免重复计算,通过存储和重用先前计算的结果来提高效率。 **基本思想** 动态规划算法的基本思想可以概括为以下四个步骤: 1. **定义状态**:首先,我们需要确定问题的状态。状态通常代表...

    浅析生物信息学动态规划算法.pdf

    懒惰动态规划算法通过延迟计算,减少了计算单元格的数量,尤其适合处理高度相似的序列。它在每一步都尝试找到局部最优解,以快速逼近全局最优。然而,对于相似度较低的序列,可能无法保证得出最佳比对结果。 3. **...

    数据结构和算法-五大常用算法:动态规划算法,算法数据结构

    这种方法与分治策略相似,但不同之处在于,动态规划处理子问题时会存储中间结果,避免重复计算,从而提高效率。 2. **何时使用动态规划**: 当问题满足以下条件时,通常考虑使用动态规划: - 要求的是一个问题的最...

    动态规划,分治算法,概率算法,模拟退火算法,搜索算法,贪婪算法,网上matlab,遗传算法,组合算法

    它通过将大问题分解为小问题并存储中间结果,避免了重复计算。经典的动态规划问题有斐波那契数列、背包问题和最长公共子序列等。 2. **分治算法**:分治策略是将一个大问题分解为两个或更多的相同或相似的子问题,...

    初识动态规划算法doc

    3. 自底向上地计算最优值,通常使用一个数组或表格来存储中间结果。 4. 如果需要,根据计算过程中得到的信息构造最优解。 以拦截导弹问题为例,输入是一系列导弹的高度,目标是找到一个最长的非递增子序列,表示...

    实验3-动态规划算法1

    实验3主要探讨了动态规划算法在解决实际问题中的应用,特别是针对两个核心问题:最长公共子序列(LCS)问题和最大子段和问题。动态规划是一种强大的算法设计策略,它通过将复杂问题分解为更小的子问题来求解,并存储...

    动态规划算法案例

    记忆化搜索是一种自顶向下解决问题的方法,通过保存中间结果来避免重复计算,与动态规划的自底向上方式形成对比。虽然两者都能解决同样的问题,但动态规划往往更适合处理具有重叠子问题的问题,因为它确保了子问题只...

    贪心算法和动态规划以及分治法的区别? (1) 贪心算法和动态规划.pdf

    5. 贪心算法的空间复杂度较高,因为它需要记录所有的中间结果,而动态规划和分治法的空间复杂度较低,因为它们可以将中间结果存储在较小的空间中。 贪心算法、动态规划和分治法都是解决问题的算法,但是它们的思路...

    动态规划算法—多边形游戏

    【动态规划算法—多边形游戏】是一种基于数学策略的单人游戏,旨在求解给定多边形的最高得分。在这个游戏中,一个多边形由n个顶点组成,每个顶点都有一个整数值,每条边则带有运算符"+"或"*"。游戏开始时,玩家首先...

Global site tag (gtag.js) - Google Analytics