动态规划之钢筋切割问题
目录
一 问题描述
二 原理
三 代码
四 输出结果
一 问题描述
注 : 资料来源于《算法导论》第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
动态规划之钢筋切割问题相关推荐
- 动态规划——钢筋切割问题的两种解法解析
动态规划问题--钢筋切割问题的两种解法解析@TOC 钢筋切割问题: 对于这个问题的两种解法 先来个官方点的解法说明: 我对两种解法的个人理解 第一种解法: 这种解法就是把先钢筋分成两部分,分别记为 i ...
- 算法导论15.1动态规划之钢条切割
动态规划与钢条切割 1.分治算法与动态规划 相同点: 都是通过组合子问题的解来求解原问题 不同: 1.分治将问题划分为互不相交的子问题,递归地求解子问题,在将它们的解组合起来,求出原问题. 2.动态规 ...
- 算法导论-动态规划(钢条切割问题)
写下文章来记录下自己学习算法导论的笔记 文章目录 写下文章来记录下自己学习算法导论的笔记 动态规划的目的 设计动态规划算法 钢条切割问题 问题描述 刻画问题结构(建立方程) 递归方程建立 带备忘录的自 ...
- 动态规划算法---钢条切割
算法进阶---动态规划算法 钢条切割问题: 程序实现: 钢条切割问题: 程序实现: 方法一和方法二是对程序实现的不断深入,逐渐降低算法实现的时间复杂度. p = [0, 1, 5, 8, 9, 10, ...
- 每天一道算法题-动态规划求钢筋分割
Dynamic programming 动态规划,与分治法相似,都是通过组合子问题的解来求解原问题,但动态规划是应用于子问题重叠的场景,每个子问题都只求一遍,将解存入表格中,避免不必要的重复工作. 问 ...
- 《算法导论》中动态规划求解钢条切割问题
动态规划算法概述 动态规划(dynamic programming)1是一种与分治方法很像的方法,都是通过组合子问题的解来求解原问题.不同之处在于,动态规划用于子问题重叠的情况,比如我们学过的斐波那契 ...
- 动态规划算法 - 钢条切割问题
1 #include"stdafx.h" 2 #include<iostream> 3 using namespace std; 4 /* 5 动态规划算法: 6 1. ...
- 《算法导论》学习(十七)----动态规划之钢条切割(C语言)
文章目录 前言 一.钢条切割问题 1.问题背景 2.问题描述 3.问题的难点 (1)情况较多 (2)消除重复子问题 二.问题解决方案 1.问题的特点 (1)最优化子结构 (2)重复子问题 2.最优化解 ...
- 动态规划:钢条切割问题
一.题目 钢条切割问题 是<算法导论>一书中介绍动态规划时的一道引题.即: 某公司购买长钢条,将其切割为短钢条出售.假设切割工序没有成本支出,已知长度为 i 的钢条出售价格为 pi ,钢条 ...
最新文章
- 安装wampserver及配置php,phpmyadmin遇到的问题及解决方法
- ACMNO.25 C语言-间隔输出 写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出1 9 9 0。 输入 一个四位数 输出 增加空格输出
- 矩阵转置 java_Java 创建矩阵并转置矩阵
- 神经网络中的「注意力」是什么?怎么用?
- C++文件如何在linux下生成动态库So,以及如何使用这个动态库
- jvm调优:jmap -histo的使用
- Colored Boots
- 大话设计模式—代理模式
- keil复制代码乱码_成都控制器开发:容易忽略!用KEIL编码汉字也会有BUG
- 前端开发---ppt展示页面评论区展示
- OpenCV-python学习笔记(二)——image processing图像基本处理
- mysql引擎innodb与ndb比较_mysql存储引擎InnoDB 1.1、NDB 7.5对比
- 转行程序员深漂的这三年 #2
- 1.封包(二)(雷电模拟器+ProxyDroid+CCProxy+WPE) 的使用
- 【图文】Latex 中文字体的使用
- 测试过程中如何解决测试账号问题
- 串口转WIFI模块通信
- python控制步进电机代码tx2_步进电机按键控制.lst
- 易班打卡——自动填写健康日报
- 中国石油大学《物理化学》第一阶段在线作业
热门文章
- redis学习之数据结构与对象(一)
- hdu 3666 THE MATRIX PROBLEM 差分约束系统
- 1041 考试座位号 (15分)——17行代码AC
- Web前端开发笔记——第三章 CSS语言 第四节 CSS列表、表格样式
- 深入解析JNA—模拟C语言结构体
- elasticsearch 客户端工具_ELK集群部署 - elasticsearch-7.9.3
- linux内核irq,linux-kernel – do_IRQ中的中断向量和irq映射
- mysql命令查看过程内容_mysql查看存储过程命令
- python开发测试岗_作为测试开发岗的面试官,我都是怎么选人的?
- 用c语言编辑一个通讯录,C语言实现一个通讯录