C++ 翻转二进制矩阵的行和列值,以最大化作为二进制数处理的所有行的总和

C++ 翻转二进制矩阵的行和列值,以最大化作为二进制数处理的所有行的总和,c++,algorithm,matrix,C++,Algorithm,Matrix,给定一个包含m行和n列的0和1的二进制矩阵,我们可以将整行或整列的内容翻转任意次数。行将被解释为二进制数。如何翻转行/列的内容以最大化每行的“m”二进制数之和 例如,矩阵=[{0},{1,0}],行的当前和=0+2=2。将第1行的内容按行翻转后,我们得到[{1,1},{1,0}],其行之和=3+2=5 链接: 顺便说一句,我不是从这个特定的链接中了解到这个问题的,而是从某人那里口头了解到的。后来我发现这个链接也有同样的问题。我们切换行和列的顺序并不重要。多次切换行或列是没有意义的 由于约束很窄,

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

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

链接:


顺便说一句,我不是从这个特定的链接中了解到这个问题的,而是从某人那里口头了解到的。后来我发现这个链接也有同样的问题。

我们切换行和列的顺序并不重要。多次切换行或列是没有意义的


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

您的问题是什么?你自己做了什么?你说的“交换”是指翻转每一位?好吧,我最初的观察是一行,如果它以0开头,翻转它会使总和变大。对于一个列,如果0多于1,它将变得更大。是吗?这听起来像是“竞争”网站的问题。虽然你在这里包括问题描述和一个例子很好,但也请添加一个指向实际问题本身的链接。另外,请尝试创建一个您自己的尝试。请花些时间刷新、选择SO、读取以及。@Someprogrammerdude这不是竞争问题。我们是否应该只切换那些0的数量大于1的列,而不是尝试所有2^20的可能性。谢谢@杰克2^20大约只有一百万。我的直觉是,有一种情况下,优化错过了一个最佳的解决方案。