【问题标题】:dynamic programming: finding largest non-overlapping squares动态规划:找到最大的非重叠正方形
【发布时间】:2009-11-12 02:00:17
【问题描述】:

我真的不知道如何使用动态编程来做到这一点: 问题: 我需要找到一张桌子上最大的 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,但我真的不知道应该在表中输入什么值。

【问题讨论】:

  • 那个格式更好?此外,作为你的第一个 SO 动作,请别人做你的 CS 作业,你不会得到很多乐趣。

标签: arrays dynamic-programming


【解决方案1】:

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

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

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

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

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

祝你好运!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-06
      • 2015-04-29
      • 2010-12-16
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多