2312. 卖木头块
题目地址(2312. 卖木头块)
https://leetcode.cn/problems/selling-pieces-of-wood/
题目描述
前置知识
动态规划记忆化递归
公司
暂无
思路
这是一个经典的枚举割点的动态规划问题。
相关题目有铺地毯/瓷砖,本质都是给你一个二维矩阵,给你一堆价值,让你求如何分割价值最小或最大。
可以这么做的前提是如果我们可以切割,那么切割后会变为两个子矩阵,这两个子矩阵和切割前除了大小不一样,其他都一样。因此可以不断枚举割点,递归解决。
定义 dp[i][j] 为切割长度为 i 宽度为 j 的木板的最大价格,那么答案就是 dp[m,n]
接下来,我们枚举横着切的切点和竖着切的切点就可以得到答案。
切割前我们有三种选择:
横着切,切哪呢?枚举所有可能。因为横着切本质是高度变了,宽度不变,因此枚举所有可能就是枚举高度为 [1,i-1](其中 i 为当前木板高度)
竖着切,同理
不切。
取三种情况的最大值即可。
关键点
枚举切割点
代码
语言支持:Python3
Python3 Code:
复杂度分析
令 t 为 prices 长度。
时间复杂度:$O(n * m * (n + m))$
空间复杂度:$O(t + n * m)$
此题解由 力扣刷题插件 自动生成。
力扣的小伙伴可以关注我,这样就会第一时间收到我的动态啦~
以上就是本文的全部内容了。大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 40K star 啦。大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。
最后更新于