2022-09-13:给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。 同时给你一个二维整数数组 prices ,其中 prices[i] = [hi, wi, pricei] 表示你可以
2022-09-13:给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices ,其中 prices[i] = [hi, wi, pricei]表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。每一次操作中,你必须按下述方式之一执行切割操作,以得到两块更小的矩形木块:沿垂直方向按高度 完全 切割木块,或沿水平方向按宽度 完全 切割木块在将一块木块切成若干小木块后,你可以根据 prices 卖木块。你可以卖多块同样尺寸的木块。你不需要将所有小木块都卖出去。你 不能 旋转切好后木块的高和宽。请你返回切割一块大小为 m x n 的木块后,能得到的 最多 钱数。注意你可以切割木块任意次。输入:m = 4, n = 6, prices = [[3,2,10],[1,4,2],[4,1,3]]。输出:32。
答案 2022-09-13:
严格位置依赖的动态规划版本 + 优化。优化 1 : 递归的形式,改成迭代形式;优化 2 : prices 中的单块收益直接填入 dp 表即可,如果有更好的分割方案,更新掉;优化 3 : 分割只需要枚举一半即可。时间复杂度:O(N3)。空间复杂度:O(N2)。
代码用 rust 编写。代码如下:
复制代码
执行结果如下:
版权声明: 本文为 InfoQ 作者【福大大架构师每日一题】的原创文章。
原文链接:【http://xie.infoq.cn/article/01848adaa618e6674e1394e87】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论