此问题出来的动态编程章中的该算法Deisgn手册通过Skiena。

  

提供一种算法,以确定是否可以通过从杂志粘贴切口产生一个给定的字符串。你给出,将确定的字符和其上的页面的任何给定的字符位置的相反侧的位置的函数。

我解决了这个与回溯,但因为它是在动态规划章节我想一定是我的复发想不通。谁能给我一个提示?

有帮助吗?

解决方案

可以以最大的二分匹配解决它。

给定的字符串的每个字符L形式左侧集。 (注意,你重复该字符,如果字符串已经重复的字符)。

杂志的每对字符的(R1,R2)形成右侧集。

L连接至(R1,R2)当且仅当L = R 1或L = R2。

查找所得到的图的最大匹配。如果所有的左边顶点是匹配的一部分,你有答案。如果不是这样,这样的字符串是不可能的。

请参阅最大双向匹配一个算法。

不知道这是否是最佳的,但并没有为难过回答完全一样问。

其他提示

如果你有一个递归回溯溶液,则可以以应用记忆化,该是做动态编程的一种方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top