这个问题来自Skiena的 The Algorithm Deisgn Manual 中的动态编程章节。
给出一个算法来确定是否可以通过粘贴杂志中的剪切块来生成给定的字符串。您将获得一个函数,该函数将识别字符及其在页面反面的位置,以用于任何给定的字符位置。
我通过回溯解决了这个问题,但由于它是在动态编程章节中,我认为必须有一个我想不通的复发。谁能给我一个提示?
答案 0 :(得分:2)
您可以通过最大的二分匹配来解决它。
给定字符串的每个字符L构成左集。 (注意,如果字符串有重复的字符,则重复字符。)
杂志的每对字符(R1,R2)形成正确的组合。
如果L = R1或L = R2,则L连接到(r1,r2)。
在结果图中找到最大匹配。如果所有左顶点都是匹配的一部分,则可以得到答案。如果没有,这样的字符串是不可能的。
有关算法,请参阅Maximum Bipartite Matchings。
不确定这是否是最佳的,并且抱歉没有完全按照要求回答。
答案 1 :(得分:1)
如果您有递归回溯解决方案,您可以应用memoization,这是进行动态编程的一种方式。