Cutting a Rod
参考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相关推荐
- DP 算法: cutting a rod
给定一个问题, 能够使用动态规划的方法解决的一个标志就是, 这个问题具有最优子结构(optimal substructure). 我们可以认为, 能够使用DP算法的问题首先能够分解为子问题. 而且我们 ...
- 分割木棒问题(Cutting a Rod)--动态规划
给定一根长度为n英寸的木棒,并且给出一组对应长度为1到n的价格表,如何切割木棒使得切割后能够获得最大的出售金额.例如,如果杆的长度为8,并且不同的长度对应的价格如下所示,则最大可获得值为22(将长度2 ...
- 算法导论第三版 第15章习题答案
2020/11/18:初稿,增加Python代码实现,修订参考文献部分错误(如15.1的第4题) 参考文献: https://walkccc.github.io/CLRS/Chap15/ https: ...
- 算法题:Rod Cutting
算法题:Rod Cutting 一.题目 二.代码 三.结果 一.题目 二.代码 lengths = [1,1,3,4] lengths = [5,4,4,2,2,8]def rodOffcut(le ...
- 动态规划法(五)钢条切割问题(rod cutting problem)
继续讲故事~~ 我们的主人公现在已经告别了生于斯,长于斯的故乡,来到了全国最大的城市S市.这座S市,位于国家的东南部,是全国的经济中心,工商业极为发达,是这个国家的人民所向往的城市.这个到处都 ...
- 切割钢条问题(rod cutting problem)
问题描述 Seriling公司购买长钢条,将其切割为短钢条出售.切割工序本身没有成本支出.公司管理层希望知道最佳的切割方案. 假定我们知道Serling公司出售一段长为ii ii英寸的钢条的价格为pi ...
- 算法之动态规划-Rod cutting
问题描述: 给定长度为n的木头,把它切分成小段卖,不同长度的木头价格不一样,求最优切法.如图1: 可以划分为如下情况 分为一份: 4 (max price:10) 分为两份 : 1 3 or 2 2 ...
- Rod cutting problem DP
动态规划算法的一个特点就是通过记忆(memomorization), 记录下原问题的子问题的最优解(因为原始问题具有最优子结构), 从而 来避免通过递归, 重复的计算子问题. 下面, 我们首先假设我们 ...
- Codeforces Round #300 A. Cutting Banner 水题
A. Cutting Banner Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...
最新文章
- AI与人类围棋士的差距到底有多大?
- MySQL在登陆时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误...
- centos 管道符取第一行_CentOS 7 文件操作命令
- QUIC助力Snapchat提升用户体验
- 【332】Machine Learning
- python土味情话_有哪些比较新的土味情话?
- C#中的delegate和event (转)
- linux中的numa和swap
- 拼写检查器——朴素贝叶斯应用
- 一文看雷击浪涌的防护解析
- 5种2D Attention整理(Non-Local、Criss-Cross、SE、CBAM、Dual-Attention)
- matlab coder分析
- 微信小程序监听手势左右滑动
- 硬盘有摩擦声音_有摩擦的建筑物
- ipad使用键盘怎么隐藏软键盘_无需鼠标和触屏操作,iPadOS 新功能让你用键盘轻松操控 iPad...
- Oracle简介与安装
- JS_SDK实现网站应用QQ登录功能-QQ互联(小白易懂)
- ArcGIS Pro教程 | 1#数据准备
- 使用matlab分析一段声音信号的均方根
- 测试计划、测试方案、测试策略、测试用例的区别