Algorithm 固定地板算法

Algorithm 固定地板算法,algorithm,Algorithm,好吧,我有个任务:约翰的浴室地板坏了。我们有一张这一层的地图,其中“.”是好板块,“+”是坏板块,例如: .+++ .+.+ 这里有5个坏盘子,3个好盘子。有两种板材,在商店出售:1x1板材和2x1板材。1x1板成本A,2x1板成本B。任务是:给定地板地图,计算地板固定的最低价格。 看看上面的例子:我们可以放置2个2x1板和1个1x1板。因此,价格将A+2*B 我有一个想法:对于每个断板,计算连接断板的最大长度。然后价格是长度/2*B+长度%2*A 问题是,我真的不知道怎么做。我有一个递归算法

好吧,我有个任务:约翰的浴室地板坏了。我们有一张这一层的地图,其中“.”是好板块,“+”是坏板块,例如:

.+++
.+.+
这里有5个坏盘子,3个好盘子。有两种板材,在商店出售:1x1板材和2x1板材。1x1板成本A,2x1板成本B。任务是:给定地板地图,计算地板固定的最低价格。

看看上面的例子:我们可以放置2个2x1板和1个1x1板。因此,价格将A+2*B

我有一个想法:对于每个断板,计算连接断板的最大长度。然后价格是长度/2*B+长度%2*A

问题是,我真的不知道怎么做。我有一个递归算法的想法,但是有很多问题,比如圆:

+++
+.+
+++
所以我有两个问题:

  • 我走的方向对吗
  • 你能给我一些关于实现这个算法的提示吗
  • 谢谢大家!

    编辑

    当2*A
    /编辑经典的平铺问题。这是一个加权精确覆盖,在非平凡的情况下(当使用两个1x1块比使用一个1x2块成本更高时),我会使用ZDD来解决它。查找示例(棋盘上的多米诺骨牌)

    有可用的库(例如CUDD),所以您不必从头开始实现ZDD,尽管这也不太难


    作为奖励,您还可以获得其他算法通常不提供的其他信息,例如有效平铺的数量,而无需全部枚举。它也很容易推广到其他尺寸/形状的瓷砖(3x1、2x2、L形等)。

    如果2*a,背包算法会很有启发性吗?你可以从观察if
    2*A开始,这里有一个提示可能会有所帮助:但是我怀疑(考虑到Gomory定理的证明显然使用了哈密顿循环)找到精确解会很困难。最简单的解决方案是强行使用它。只要尝试每种可能的瓷砖组合,并计算每种瓷砖的价格即可。计算密集,但将工作。