我有一个家庭作业问题,我一直在尝试解决一段时间,但我一生都无法解决。
我有一张 X*Y 尺寸的表,以及一组较小尺寸的图案,以及与之相关的价格值。我可以水平或垂直切割板材,我必须找到优化的切割模式才能从板材中获得最大的利润。
据我所知,应该有 (X*Y)(X+Y+#ofPatterns) 递归操作。复杂性应该是指数级的。有人可以解释为什么吗?
我想出的伪代码如下:
Optimize( w, h ) {
best_price = 0
for(Pattern p : all patterns) {
if ( p fits into this piece of cloth && p’s price > best price) {best_price = p’s price}
}
for (i = 1…n){
L= Optimize( i, h );
R= Optimize( w-i, h);
if (L_price + R_price > best_price) { update best_price}
}
for (i = 1…n){
T= Optimize( w, i );
B= Optimize( w, h-i);
if (T_price + B_price > best_price) { update best_price}
}
return best_price;
}