Problem#
給你 $m \times n$ 的二維陣列 grid
裡面只包含 0
和 1
,你可以對每行、列進行 flip 操作(0
變 1
,1
變 0
),每列可以組成一個 binary 數字,最後加總起來就是分數,你可以 flip 無限次(或不 flip),問你最大的分數是多少。
測資限制#
- $1 \le m, n \le 20$
想法#
貪心
目標要找最大,所以最左邊的 bit 一定要是 1
,如果有一列的最左 bit 是 0
的話,就 flip 整列。接著剩下的行,就看 0
與 1
的數量,目標是所有 1
的數量都要「大於等於」 0
的數量,所以遇到 1
的數量小於 0
的數量的行,就 flip 該行,如此一來便是最大的數字。
加總 $m$ 列即是答案。
AC Code#
- 時間複雜度: $\mathcal{O}(mn)$
- 空間複雜度: $\mathcal{O}(1)$