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问题效果良好,但随着问题规模的增大,其计算复杂度会急剧增加,导致计算时间过长。对于大规模问题,通常会采用其他算法,如近似算法、遗传算法或模拟退火等。在使用...
动态规划的实现通常涉及递归和迭代两种方式,Java中常用ArrayList或ArrayList二维数组来存储和更新中间状态。 在学习动态规划的过程中,整理笔记是非常有益的,可以帮助我们更好地理解和记忆各种问题的解法。"动态...
标题中的“动态规划算法及其一些例子”意味着我们将探讨动态规划的基本原理,并通过具体的例子来加深理解。动态规划通常有以下三个关键步骤: 1. **定义状态**:明确表示问题的中间阶段,例如,斐波那契数列中的第n...
本实验报告主要探讨了使用动态规划算法解决计算二项式系数的问题。实验者刘春云,专业为软件工程,通过这个实验学习并应用了动态规划这一核心的计算机科学概念。实验指导教师为赵晓平,实验时间为2012年2月21日。 *...
动态规划的核心思想是将大问题分解为小问题,并存储中间结果以避免重复计算。对于矩阵连乘问题,我们可以构建一个二维数组dp[i][j],表示矩阵Ai到Aj(包含两端)的最优乘法次数。这里,i ,因为我们要找到所有可能的...
因此,动态规划算法通常采用自底向上的方式,存储并利用已解决的子问题的解,避免了重复计算,提高了效率。 在"DYNPROG.M"文件中,我们可以期待找到以下几个方面的内容: 1. **状态定义**:首先,动态规划算法需要...
动态规划是一种优化技术,常用于解决具有重叠子问题和最优子结构的问题,它通过构建一个表格来存储中间结果,避免了重复计算。 立体匹配的目标是找到两幅图像(通常为同一场景的左右视图)中对应像素的最佳匹配。这...
动态规划的核心理念是避免重复计算,通过存储和重用先前计算的结果来提高效率。 **基本思想** 动态规划算法的基本思想可以概括为以下四个步骤: 1. **定义状态**:首先,我们需要确定问题的状态。状态通常代表...
懒惰动态规划算法通过延迟计算,减少了计算单元格的数量,尤其适合处理高度相似的序列。它在每一步都尝试找到局部最优解,以快速逼近全局最优。然而,对于相似度较低的序列,可能无法保证得出最佳比对结果。 3. **...
这种方法与分治策略相似,但不同之处在于,动态规划处理子问题时会存储中间结果,避免重复计算,从而提高效率。 2. **何时使用动态规划**: 当问题满足以下条件时,通常考虑使用动态规划: - 要求的是一个问题的最...
它通过将大问题分解为小问题并存储中间结果,避免了重复计算。经典的动态规划问题有斐波那契数列、背包问题和最长公共子序列等。 2. **分治算法**:分治策略是将一个大问题分解为两个或更多的相同或相似的子问题,...
3. 自底向上地计算最优值,通常使用一个数组或表格来存储中间结果。 4. 如果需要,根据计算过程中得到的信息构造最优解。 以拦截导弹问题为例,输入是一系列导弹的高度,目标是找到一个最长的非递增子序列,表示...
实验3主要探讨了动态规划算法在解决实际问题中的应用,特别是针对两个核心问题:最长公共子序列(LCS)问题和最大子段和问题。动态规划是一种强大的算法设计策略,它通过将复杂问题分解为更小的子问题来求解,并存储...
记忆化搜索是一种自顶向下解决问题的方法,通过保存中间结果来避免重复计算,与动态规划的自底向上方式形成对比。虽然两者都能解决同样的问题,但动态规划往往更适合处理具有重叠子问题的问题,因为它确保了子问题只...
5. 贪心算法的空间复杂度较高,因为它需要记录所有的中间结果,而动态规划和分治法的空间复杂度较低,因为它们可以将中间结果存储在较小的空间中。 贪心算法、动态规划和分治法都是解决问题的算法,但是它们的思路...
【动态规划算法—多边形游戏】是一种基于数学策略的单人游戏,旨在求解给定多边形的最高得分。在这个游戏中,一个多边形由n个顶点组成,每个顶点都有一个整数值,每条边则带有运算符"+"或"*"。游戏开始时,玩家首先...