题目描述

  • Serling公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。
    假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi(i=1,2,…,单位为美元)。钢条的长度均为整英寸。

  • 钢条切割问题是这样的:给定一段长度为n英寸的钢条和一个价格表pi(i=1,2,…n),求切割钢条方案,使得销售收益rn最大。

  • 注意,如果长度为n英寸的钢条的价格pn足够大,最优解可能就是完全不需要切割。

  • 下面另n=10,给出个长度的价格,求价值最大值
    长度i 1 2 3 4 5 6 7 8 9 10
    价格Pi 1 5 8 16 10 17 17 20 24 30

题目解析

  • 可以使用贪心算法,对每个切割方案进行封装,并根据单位长度的价格进行排序,每次尽可能的切割单位长度价格最大的长度
  • 动态规划,dp数组中保存保留(切)当前(i)长度的最大价值,即dp[i]=p[i]+dp[i-长度[i]];

代码(动态规划)

static int n =10;static int[] p = {1, 5, 8, 16, 10, 17, 17, 20, 24, 30};public static void main(String[] args) {double[] pricePerL=new double[p.length];for (int i = 0; i < pricePerL.length; i++) {pricePerL[i]=p[i]/(i+1.0);}int[] dp=new int[n+1];dp[0]=0;dp[1]=1;for (int i = 2; i < dp.length; i++) {int Max=0;for (int j = 0; j <i; j++) {if(p[i-j-1]+dp[j]>Max) {Max=p[i-j-1]+dp[j];}}dp[i]=Max;}System.out.println(dp[n]);//System.out.println(Arrays.toString(pricePerL));}

贪心、动态规划:钢条切割相关推荐

  1. 动态规划 — 钢条切割问题

    动态规划: 什么是动态规划? 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息.在求解任一子问题时 ...

  2. 算法导论 动态规划钢条切割问题 C语言

    动态规划钢条切割问题 动态规划(dynamic programming)与分治法类似.分治策略将问题划分为互不相交的子问题,递归求解子问题,再将子问题进行组合,求解原问题.动态规划应用于子问题重叠的情 ...

  3. 动态规划—钢条切割问题与01背包问题

    目录 1.钢条切割问题 第一种求最优解方案: 第二种求最优解方案: 第一种方法是 带备忘的自顶向下法 第二种方法是 自底向上法 2.01背包问题 1,穷举法(把所有情况列出来,比较得到 总价值最大的情 ...

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

    文章目录 一.钢条切割定义 二.具体步骤 1.思考 2.代码思考 3.动态规划求解 4.伪代码 三:总结: 一.钢条切割定义 图为价格表 给定一段长度是n的钢条和一个价格表,求切割方案使得收益达到最大 ...

  5. 动态规划-钢条切割(java)

    数据结构与算法系列源代码:https://github.com/ThinerZQ/AllAlgorithmInJava 本文源代码:https://github.com/ThinerZQ/AllAlg ...

  6. 动态规划 -- 钢条切割问题

    给定一段长度为n英寸的钢条和一个价格表p,求切割钢条方案(钢条的长度均为整英寸),使得销售收益最大. 我们可以计算出长度为n英寸的钢条共有2的(n-1)次方种不同的切割方案. 为解决规模为n的原问题, ...

  7. 动态规划——钢条切割

    有一根钢条,和他的长度价格表,真么样切割才能使得售出的钢条收益最大. 不考虑钢条的切割损耗. 输入n 表示钢条的长度 价格表p[i] 表示长度为i的钢条出售的价格 ------------------ ...

  8. 动态规划-钢条切割问题

    int BottomUpCutRod(int p[],int n) { int *r=new int[n+1]; r[0]=0; for (int j=1;j<=n;j++) { int q=- ...

  9. Python数据结构与算法-动态规划(钢条切割问题)

    一.动态规划(DP)介绍 1.从斐波那契数列看动态规划 (1)问题 斐波那契数列递推式: 练习:使用递归和非递归的方法来求解斐波那契数列的第n项 (2)递归方法的代码实现 import time # ...

最新文章

  1. 为什么叫python编程-运维为什么要学编程?编程为什么是Python?
  2. Reallusion Character Creator 3中文版
  3. 在.NET中执行Async/Await的两种错误方法
  4. python中可迭代对象拆包时、怎么赋值给占位符_python3-数据结构和算法 » 1.2 解压可迭代对象赋值给多个变量...
  5. Java基础知识融合(Arraylist集合,多态,继承,封装,包装类,循环嵌套,if嵌套等等)
  6. RedisHelper帮助类
  7. Linux自学之旅-基础命令(一)
  8. vue 圆形百分比进度条_vue 圆形进度条组件解析
  9. 环比计算分母为0怎么办?
  10. 《孽海记·思凡》唱段·风吹荷叶煞
  11. 回扣应该怎么给——某人的经验
  12. 文件夹的菜单栏和地址栏不见了
  13. org.eclipse.core.runtime.CoreException: Plug-in org.eclipse.jdt.ui was unable to load class org.ecli
  14. 怎样下载谷歌最新版100.0.4896.127chromedriver
  15. thinkphp6 jwt扩展
  16. AD采集中常用的Ksps什么意思
  17. linux常用压缩和解压缩命令整理
  18. JAVA多线程设计模式篇 1、什么是多线程设计模式
  19. Jenkins自动构建(CI/DI)项目(一)
  20. Java FX 表格数据赋值

热门文章

  1. 解决idea翻译插件translation无法使用问题
  2. 用A-Spice思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂
  3. 古天乐一哭,电影宣传又跪了下来
  4. java统计英文单词_java单词统计
  5. 计算机开机白屏怎么处理,电脑开机白屏怎么办如何解决开机白屏的问题
  6. python+tkinter+threading制作多线程简易音乐播放器(自动播放,上一曲,下一曲,播放,暂停,实时显示歌曲名并能自动切换歌曲的功能)
  7. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程(Part 1) 1
  8. socks5代理IP的几种测试工具
  9. 每日一题:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
  10. node.js转换shp文件数据的坐标系