参考Top 20 Dynamic Programming Interview Questions。

Cutting a Rod

题目:给定一根长度为n的木棒,同时有一个木棒长度从1到n对应的价格表,即prices[i]表示木棒长度为i+1时对应的价格。不限切割次数和方法,使得最后的总价值最大。

思路:用dp[i+1]表示木棒长度为i时对应的最大价值,那么dp[i+1]的最大值由[0, i][1, i-1](表示将木棒切分为长度为1和长度为i-1), [2, i-2],…,[i, 0]这些组合中的最大值决定,通过复用之前计算的dp[i], dp[i-1]...来加快速度。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int cut_rod(const vector<int>& prices) {int n = prices.size();vector<int> dp(n + 1, 0);for (int i = 0; i < n; ++i) {for (int j = 0; j <= i; ++j) {dp[i+1] = max(dp[i+1], dp[i - j] + prices[j]);}}return dp[n];
}int main()
{vector<int> prices = { 1, 5, 8, 9, 10, 17, 17, 20 };cout << cut_rod(prices) << endl;return 0;
}

Cutting a Rod相关推荐

  1. DP 算法: cutting a rod

    给定一个问题, 能够使用动态规划的方法解决的一个标志就是, 这个问题具有最优子结构(optimal substructure). 我们可以认为, 能够使用DP算法的问题首先能够分解为子问题. 而且我们 ...

  2. 分割木棒问题(Cutting a Rod)--动态规划

    给定一根长度为n英寸的木棒,并且给出一组对应长度为1到n的价格表,如何切割木棒使得切割后能够获得最大的出售金额.例如,如果杆的长度为8,并且不同的长度对应的价格如下所示,则最大可获得值为22(将长度2 ...

  3. 算法导论第三版 第15章习题答案

    2020/11/18:初稿,增加Python代码实现,修订参考文献部分错误(如15.1的第4题) 参考文献: https://walkccc.github.io/CLRS/Chap15/ https: ...

  4. 算法题:Rod Cutting

    算法题:Rod Cutting 一.题目 二.代码 三.结果 一.题目 二.代码 lengths = [1,1,3,4] lengths = [5,4,4,2,2,8]def rodOffcut(le ...

  5. 动态规划法(五)钢条切割问题(rod cutting problem)

      继续讲故事~~   我们的主人公现在已经告别了生于斯,长于斯的故乡,来到了全国最大的城市S市.这座S市,位于国家的东南部,是全国的经济中心,工商业极为发达,是这个国家的人民所向往的城市.这个到处都 ...

  6. 切割钢条问题(rod cutting problem)

    问题描述 Seriling公司购买长钢条,将其切割为短钢条出售.切割工序本身没有成本支出.公司管理层希望知道最佳的切割方案. 假定我们知道Serling公司出售一段长为ii ii英寸的钢条的价格为pi ...

  7. 算法之动态规划-Rod cutting

    问题描述: 给定长度为n的木头,把它切分成小段卖,不同长度的木头价格不一样,求最优切法.如图1: 可以划分为如下情况 分为一份: 4 (max price:10) 分为两份 : 1 3 or 2 2 ...

  8. Rod cutting problem DP

    动态规划算法的一个特点就是通过记忆(memomorization), 记录下原问题的子问题的最优解(因为原始问题具有最优子结构), 从而 来避免通过递归, 重复的计算子问题. 下面, 我们首先假设我们 ...

  9. Codeforces Round #300 A. Cutting Banner 水题

    A. Cutting Banner Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...

最新文章

  1. AI与人类围棋士的差距到底有多大?
  2. MySQL在登陆时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误...
  3. centos 管道符取第一行_CentOS 7 文件操作命令
  4. QUIC助力Snapchat提升用户体验
  5. 【332】Machine Learning
  6. python土味情话_有哪些比较新的土味情话?
  7. C#中的delegate和event (转)
  8. linux中的numa和swap
  9. 拼写检查器——朴素贝叶斯应用
  10. 一文看雷击浪涌的防护解析
  11. 5种2D Attention整理(Non-Local、Criss-Cross、SE、CBAM、Dual-Attention)
  12. matlab coder分析
  13. 微信小程序监听手势左右滑动
  14. 硬盘有摩擦声音_有摩擦的建筑物
  15. ipad使用键盘怎么隐藏软键盘_无需鼠标和触屏操作,iPadOS 新功能让你用键盘轻松操控 iPad...
  16. Oracle简介与安装
  17. JS_SDK实现网站应用QQ登录功能-QQ互联(小白易懂)
  18. ArcGIS Pro教程 | 1#数据准备
  19. 使用matlab分析一段声音信号的均方根
  20. 测试计划、测试方案、测试策略、测试用例的区别

热门文章

  1. 使用redis的setnx可以非同一线程进行加锁和解锁(附源码)
  2. Python3 基础语法知识1
  3. Geany的所有主题文件
  4. 软件原型设计(软件Axure_RP)
  5. win10电脑桌面便签怎么添加
  6. PC版京东炸年兽活动一键做任务 全民自动炸年兽最新版1.1
  7. Fiddler抓包软件[一]下载与安装
  8. 射击末世--建造者模式
  9. 支付宝网商贷是雪中送炭么?
  10. proftpd mysql_proftpd+mysql 安装配置详细文档