http://www.spoj.pl/problems/GNY07H/ 在这个问题中,我们必须找到在4Xw(w> = 1)矩形中排列2X1瓦片的多种方法? 我已经尝试过这个问题并给了它很多时间,但却无法提出任何解决方案。如何处理这类问题。意思是如何让dp重复出现。 ?
答案 0 :(得分:10)
您可以逐行构建4xW矩形。构建下一行时,上一行可以处于6种不同的状态:
XXXX (1 - filled)
XX-- (2)
-XX- (3)
--XX (4)
X--X (5)
---- (6 - empty)
例如,如果前一行是(5),则必须放置两个垂直多米诺骨牌,然后下一行将是(3):
XXXX
XABX
-AB-
让X(W,q)
表示4xW矩形的可能组合,其中最后一行处于状态q
,其余部分完全填充。
如果您知道所有6个X(W-1,q)
州的q
,则可以轻松计算X(W,q)
。
您知道初始状态X(1,q)
(q = 1..6 - > 1,1,1,1,1,无效)。所以你可以增加W并为每个W获得这些数字。
最终结果为X(W,1)
(最后一行已填充)。
答案 1 :(得分:7)
我也是动态编程变体的初学者,但是此链接提到您需要应用“动态编程与配置文件”的http://apps.topcoder.com/forums/;jsessionid=A5053396424C9F9BBB9337ECAC9C6C17?module=Thread&threadID=770579&start=0&mc=2#1643035,并且该链接还指向教程http://apps.topcoder.com/forums/?module=Thread&threadID=697369&start=0&mc=19 ,“图层计数+图层配置文件”。
从以上链接: “这是最强类型的DP状态域。它通常用于特殊图形上的平铺或覆盖问题。经典的例子是:计算用多米诺骨牌平铺矩形板的方法的数量(某些单元格)不能使用);或者尽可能多地在国际象棋棋盘上放置国际象棋棋子,这样它们就不会相互碰撞(同样,一些细胞也可能受到限制)。“
有关此技术的更多平易近人的教程可在以下网址获得:
http://sk765.blogspot.in/2012/02/dynamic-programming-with-profile.html
http://sk765.blogspot.in/2012/02/dynamic-programming-with-profile_13.html
http://sk765.blogspot.in/2012/02/dynamic-programming-with-profile_7469.html
http://sk765.blogspot.in/2012/02/dynamic-programming-with-profile_6894.html
我也在努力解决这些问题。
这不是你提出的特定问题的答案,而是人们在解决这类问题时所遵循的一般技术。
答案 2 :(得分:0)
我会尝试一种回溯算法:首先水平放置所有的瓷砖,然后回溯直到你可以铺设一个垂直的瓷砖(然后用水平分层向前) - 最终你将枚举所有可能的解决方案,每个只有一次(一个正方形)最后的回溯阶段将包含水平或垂直图块,当存在时将提供唯一的解决方案。
我不知道,不过这是否是解决问题的最佳算法。
答案 3 :(得分:0)
如果通过移除任何2 * 1块,一个模式(gemoetry)出现,使得它再次成为中间结果,那么它就给出了递归函数。从那里只是从它创建DP。
对于您的问题,请参阅链接。它将解释一切
有关进一步的参考资料,请参阅IOI培训的链接
http://www.iarcs.org.in/inoi/online-study-material/topics/dp-tiling.php