-1

我真的不知道如何使用动态编程来做到这一点:问题:我需要找到一个表的 2 个最大的非重叠正方形例如:

5 6
R F F R R F
F F F F F F
R R F F F F
F F F F F F
F F F F F F

数字 5 和 6 分别是行数和列数,“R”表示保留,“F”表示空闲。在这种情况下,最大的正方形是

F F F F
F F F F
F F F F
F F F F

第二大(与前一个不重叠)是

F F
F F

到目前为止,我已将值放入二维数组,但不知道之后该怎么做。试图参考 0-1 背包和 LCS,但实际上我不知道应该在表中输入什么值。

4

2 回答 2

0

那么,在设计动态规划算法时,您的首要任务应该是找到问题的递归解决方案。完成之后,将其转换为动态编程算法几乎是微不足道的;)。

一些可能/无济于事的提示:

一个可能的基本情况很明显:任何两个 1 单元格正方形始终不重叠。

请记住,两个正方形中最大的一个不能覆盖整个表格(因为那样你就不会有第二大的),所以它不能是行:列大小。

你应该对你评估的每个解决方案都有一个“分数”,看看什么是最好的。这个分数显然是 size1 + size2,条件是 size1 应该是可能的最大值。

祝你好运!!

于 2009-11-12T02:31:39.053 回答
0

这是最长公共子串问题的变体,不是 LCS(最长公共子序列)。将您要比较的两个字符串想象成一个矩形的边,它们的字符是正方形。正方形中的“F”表示字符串中两个字符之间的匹配,因此最大的正方形是最长的公共子字符串。

于 2009-11-12T02:49:57.410 回答