目录

一 问题描述
二 原理
三 代码
四 输出结果

一 问题描述

注 : 资料来源于《算法导论》第15章动态规划.

二 原理

三 代码

自顶向下解法


/*** * 采用自顶向下解法* * **/
public class CuttingSteel {private static int[] r = new int[11];//最大收益备忘录private static int[] p = new int[11]; //定义价格/*** 切割钢筋备忘录* int[] p 官方定义的价格* int n 表示n节长的钢筋* **/public  int MEMOIZEDP_CUT_ROD(int n){r = new int[n+1];p = new int[n+1];/*** 初始化 int[] p* 长度    =  0   1   2   3   4   5   6   7   8   9   10* 价格  =  0   1   5   8   9   10  17  17  20  24  30* **/if(n<11) p = new int[11];p[0]=0;p[1]=1;p[2]=5;p[3]=8;p[4]=9;p[5]=10;p[6]=17;p[7]=17;p[8]=20;p[9]=24;p[10]=30;/*** 初始化 int[] * **/for(int i = 0 ; i < r.length ; i++){r[i] = -1;}return MEMOIZED_CUT_ROD_AUX(p,n,r);}/*** 获取切割钢筋最大收益* 参数说明:* int[] p 官方定义价格* int n 当前钢筋节数* int r[] 最大收益备忘录* **/private int MEMOIZED_CUT_ROD_AUX(int[] p,int n,int r[]){int q = -1; //最大值if(r[n]>=0) return r[n];if(n==0){q = 0;}else if(q==-1){for(int i = 1 ; i <= n ; i++){q=max(q,p[i]+MEMOIZED_CUT_ROD_AUX(p,n-i,r));}}r[n] = q; //缓存最大收益return q;}/*** 返回两个数中最大的值* **/private int max(int a,int b){if(a > b) return a;return b;}public static void main(String[] args) {CuttingSteel cuttingSteel = new CuttingSteel();for(int i = 0 ; i <= 50 ; i++){int maxProfit =  cuttingSteel.MEMOIZEDP_CUT_ROD(i);System.out.println(i+"节钢筋的最大利益为 : " + maxProfit);}}}

四 输出结果

0节钢筋的最大利益为 : 0
1节钢筋的最大利益为 : 1
2节钢筋的最大利益为 : 5
3节钢筋的最大利益为 : 8
4节钢筋的最大利益为 : 10
5节钢筋的最大利益为 : 13
6节钢筋的最大利益为 : 17
7节钢筋的最大利益为 : 18
8节钢筋的最大利益为 : 22
9节钢筋的最大利益为 : 25
10节钢筋的最大利益为 : 30
11节钢筋的最大利益为 : 31
12节钢筋的最大利益为 : 35
13节钢筋的最大利益为 : 38
14节钢筋的最大利益为 : 40
15节钢筋的最大利益为 : 43
16节钢筋的最大利益为 : 47
17节钢筋的最大利益为 : 48
18节钢筋的最大利益为 : 52
19节钢筋的最大利益为 : 55
20节钢筋的最大利益为 : 60
21节钢筋的最大利益为 : 61
22节钢筋的最大利益为 : 65
23节钢筋的最大利益为 : 68
24节钢筋的最大利益为 : 70
25节钢筋的最大利益为 : 73
26节钢筋的最大利益为 : 77
27节钢筋的最大利益为 : 78
28节钢筋的最大利益为 : 82
29节钢筋的最大利益为 : 85
30节钢筋的最大利益为 : 90
31节钢筋的最大利益为 : 91
32节钢筋的最大利益为 : 95
33节钢筋的最大利益为 : 98
34节钢筋的最大利益为 : 100
35节钢筋的最大利益为 : 103
36节钢筋的最大利益为 : 107
37节钢筋的最大利益为 : 108
38节钢筋的最大利益为 : 112
39节钢筋的最大利益为 : 115
40节钢筋的最大利益为 : 120
41节钢筋的最大利益为 : 121
42节钢筋的最大利益为 : 125
43节钢筋的最大利益为 : 128
44节钢筋的最大利益为 : 130
45节钢筋的最大利益为 : 133
46节钢筋的最大利益为 : 137
47节钢筋的最大利益为 : 138
48节钢筋的最大利益为 : 142
49节钢筋的最大利益为 : 145
50节钢筋的最大利益为 : 150

动态规划之钢筋切割问题相关推荐

  1. 动态规划——钢筋切割问题的两种解法解析

    动态规划问题--钢筋切割问题的两种解法解析@TOC 钢筋切割问题: 对于这个问题的两种解法 先来个官方点的解法说明: 我对两种解法的个人理解 第一种解法: 这种解法就是把先钢筋分成两部分,分别记为 i ...

  2. 算法导论15.1动态规划之钢条切割

    动态规划与钢条切割 1.分治算法与动态规划 相同点: 都是通过组合子问题的解来求解原问题 不同: 1.分治将问题划分为互不相交的子问题,递归地求解子问题,在将它们的解组合起来,求出原问题. 2.动态规 ...

  3. 算法导论-动态规划(钢条切割问题)

    写下文章来记录下自己学习算法导论的笔记 文章目录 写下文章来记录下自己学习算法导论的笔记 动态规划的目的 设计动态规划算法 钢条切割问题 问题描述 刻画问题结构(建立方程) 递归方程建立 带备忘录的自 ...

  4. 动态规划算法---钢条切割

    算法进阶---动态规划算法 钢条切割问题: 程序实现: 钢条切割问题: 程序实现: 方法一和方法二是对程序实现的不断深入,逐渐降低算法实现的时间复杂度. p = [0, 1, 5, 8, 9, 10, ...

  5. 每天一道算法题-动态规划求钢筋分割

    Dynamic programming 动态规划,与分治法相似,都是通过组合子问题的解来求解原问题,但动态规划是应用于子问题重叠的场景,每个子问题都只求一遍,将解存入表格中,避免不必要的重复工作. 问 ...

  6. 《算法导论》中动态规划求解钢条切割问题

    动态规划算法概述 动态规划(dynamic programming)1是一种与分治方法很像的方法,都是通过组合子问题的解来求解原问题.不同之处在于,动态规划用于子问题重叠的情况,比如我们学过的斐波那契 ...

  7. 动态规划算法 - 钢条切割问题

    1 #include"stdafx.h" 2 #include<iostream> 3 using namespace std; 4 /* 5 动态规划算法: 6 1. ...

  8. 《算法导论》学习(十七)----动态规划之钢条切割(C语言)

    文章目录 前言 一.钢条切割问题 1.问题背景 2.问题描述 3.问题的难点 (1)情况较多 (2)消除重复子问题 二.问题解决方案 1.问题的特点 (1)最优化子结构 (2)重复子问题 2.最优化解 ...

  9. 动态规划:钢条切割问题

    一.题目 钢条切割问题 是<算法导论>一书中介绍动态规划时的一道引题.即: 某公司购买长钢条,将其切割为短钢条出售.假设切割工序没有成本支出,已知长度为 i 的钢条出售价格为 pi ,钢条 ...

最新文章

  1. 安装wampserver及配置php,phpmyadmin遇到的问题及解决方法
  2. ACMNO.25 C语言-间隔输出 写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出1 9 9 0。 输入 一个四位数 输出 增加空格输出
  3. 矩阵转置 java_Java 创建矩阵并转置矩阵
  4. 神经网络中的「注意力」是什么?怎么用?
  5. C++文件如何在linux下生成动态库So,以及如何使用这个动态库
  6. jvm调优:jmap -histo的使用
  7. Colored Boots
  8. 大话设计模式—代理模式
  9. keil复制代码乱码_成都控制器开发:容易忽略!用KEIL编码汉字也会有BUG
  10. 前端开发---ppt展示页面评论区展示
  11. OpenCV-python学习笔记(二)——image processing图像基本处理
  12. mysql引擎innodb与ndb比较_mysql存储引擎InnoDB 1.1、NDB 7.5对比
  13. 转行程序员深漂的这三年 #2
  14. 1.封包(二)(雷电模拟器+ProxyDroid+CCProxy+WPE) 的使用
  15. 【图文】Latex 中文字体的使用
  16. 测试过程中如何解决测试账号问题
  17. 串口转WIFI模块通信
  18. python控制步进电机代码tx2_步进电机按键控制.lst
  19. 易班打卡——自动填写健康日报
  20. 中国石油大学《物理化学》第一阶段在线作业

热门文章

  1. redis学习之数据结构与对象(一)
  2. hdu 3666 THE MATRIX PROBLEM 差分约束系统
  3. 1041 考试座位号 (15分)——17行代码AC
  4. Web前端开发笔记——第三章 CSS语言 第四节 CSS列表、表格样式
  5. 深入解析JNA—模拟C语言结构体
  6. elasticsearch 客户端工具_ELK集群部署 - elasticsearch-7.9.3
  7. linux内核irq,linux-kernel – do_IRQ中的中断向量和irq映射
  8. mysql命令查看过程内容_mysql查看存储过程命令
  9. python开发测试岗_作为测试开发岗的面试官,我都是怎么选人的?
  10. 用c语言编辑一个通讯录,C语言实现一个通讯录