给定一个由M×N个木块组成的木板,我们需要找到将其分解为正方形木块的最小成本。
我们可以沿水平和垂直线切割木板,每次切割会将木板分割成较小的部分。每个切割的成本取决于该切割是否沿着水平或垂直线进行。
让我们用x[1]、x[2]、…、x[n-1]表示沿连续垂直线切割的成本,在水平线上用y[1]、y[2]、…、y[m-1]表示。如果进行一次成本为c的切割,并且该切割通过n个线段,则此切割的总成本将为n*c。
将整个木板切割成单个正方形的成本是使用连续切割将整个木板切割成大小为1x1的正方形木块的成本之和。
求将整个木板切成大小为1x1的正方形木块的最小成本是多少。
示例:假设有一个6×4的网格。
按行切割成本如下:[2 1 3 1 4]
按列切割成本如下:[4 1 2]
答案将是42。
我们应该按照以下顺序开始切割:y5、x1、y3、y1、x3、y2、y4和x2。第一次切割将是成本为y5=4的水平切割。接下来我们将使用x1进行垂直切割。由于该切割通过两个线段(由之前的垂直切割创建),因此其总成本为2*x1 = 2*4。类似地,下一个水平切割(y3)将经过两个线段,并且成本为2*y3 = 2*3。我们可以采用类似的方法继续操作,得到的总成本为4 + 4*2 + 3*2 + 2*2 + 2*4 + 1*3 + 1*3 + 1*6 = 42。
我的方法:从第1行和第2行之间的切割开始检查,然后依此类推。但这显然效率太低。那么如何解决这个问题呢?
我们可以沿水平和垂直线切割木板,每次切割会将木板分割成较小的部分。每个切割的成本取决于该切割是否沿着水平或垂直线进行。
让我们用x[1]、x[2]、…、x[n-1]表示沿连续垂直线切割的成本,在水平线上用y[1]、y[2]、…、y[m-1]表示。如果进行一次成本为c的切割,并且该切割通过n个线段,则此切割的总成本将为n*c。
将整个木板切割成单个正方形的成本是使用连续切割将整个木板切割成大小为1x1的正方形木块的成本之和。
求将整个木板切成大小为1x1的正方形木块的最小成本是多少。
示例:假设有一个6×4的网格。
按行切割成本如下:[2 1 3 1 4]
按列切割成本如下:[4 1 2]
答案将是42。
我们应该按照以下顺序开始切割:y5、x1、y3、y1、x3、y2、y4和x2。第一次切割将是成本为y5=4的水平切割。接下来我们将使用x1进行垂直切割。由于该切割通过两个线段(由之前的垂直切割创建),因此其总成本为2*x1 = 2*4。类似地,下一个水平切割(y3)将经过两个线段,并且成本为2*y3 = 2*3。我们可以采用类似的方法继续操作,得到的总成本为4 + 4*2 + 3*2 + 2*2 + 2*4 + 1*3 + 1*3 + 1*6 = 42。
我的方法:从第1行和第2行之间的切割开始检查,然后依此类推。但这显然效率太低。那么如何解决这个问题呢?
我无法理解为什么我们需要**cut_groups_ordered_by_most_cut_axis**,如果我不考虑这个**cut_groups_ordered_by_most_cut_axis**排序,我无法得到任何实际影响的测试用例
。 - codeomnitrix