【问题标题】:Flipping rows and column values of a binary matrix to maximize the sum of all rows treated as binary numbers翻转二进制矩阵的行和列值以最大化所有被视为二进制数的行的总和
【发布时间】:2020-11-15 00:55:43
【问题描述】:

给定一个由 0 和 1 组成的具有 m 行和 n 列的二进制矩阵,我们可以将整行或整列的内容翻转任意次。行将被解释为二进制数。如何翻转行/列的内容以最大化“m”个二进制数的总和,每行。

例如,矩阵 = [{0 0}, {1,0}],当前行的总和 = 0 + 2 = 2。将第 1 行的内容逐行翻转后,我们得到 [{1,1 }, {1,0}],其行数之和 = 3 + 2 = 5。

链接:https://leetcode.com/problems/score-after-flipping-matrix/

附:我不是从这个特定的链接中知道这个问题的,而是从某人那里口头知道的。后来我发现这个链接有同样的问题。

【问题讨论】:

  • 您的问题是什么?你自己做了什么?
  • “交换”是指翻转每一位?
  • 好的,所以我最初的观察是针对一行,如果它以 0 开头,翻转它会使总和更大。对于一列,如果 0 多于 1,它将变得更大。对吗?
  • 这听起来像是一个“竞争”网站问题。虽然在 SO 上包含问题描述和示例很好,但也请添加指向实际问题本身的链接。也请尝试创建一个minimal reproducible example 您自己的尝试。请花点时间刷新the help pages,阅读SO tour,阅读How to Ask,以及this question checklist
  • @Someprogrammerdude 这不是竞争问题。

标签: c++ algorithm matrix


【解决方案1】:

我们切换行和列的顺序无关紧要。多次切换行或列是没有意义的。

由于约束很窄,我们可以尝试最多 220 种可能性来切换列的子集,然后为每种可能性切换具有前导零的行,因为这是我们能做到的最好的考虑到我们对列的选择。

【讨论】:

  • 我们是否应该只切换那些 0 的数量大于 1 的列,而不是尝试所有 2^20 种可能性。谢谢!
  • @JackR 2^20 大约只有一百万。我的直觉是,在某些情况下,优化会错过最佳解决方案。
猜你喜欢
  • 2023-04-08
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 2017-02-11
  • 2020-04-21
相关资源
最近更新 更多