สมมติว่าเรามีเมทริกซ์ไบนารีหนึ่งตัว เราต้องหาจำนวนสูงสุดของ 1s ที่เราหาได้ถ้าเราพลิกแถวแล้วพลิกคอลัมน์
ดังนั้น ถ้าอินพุตเป็นแบบนี้
1 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
แล้วผลลัพธ์จะเป็น 8
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
n :=ขนาดของแถวในเมทริกซ์
-
m :=ขนาดของคอลัมน์ในเมทริกซ์
-
ยกเลิก :=0
-
กำหนดขนาดแถวอาร์เรย์ n
-
กำหนดขนาดอาร์เรย์ของขนาด n
-
รวม :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
row[i] :=row[i] + matrix[i, j]
-
col[j] :=col[j] + matrix[i, j]
-
ทั้งหมด :=ทั้งหมด + เมทริกซ์[i, j]
-
-
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
cand :=total - row[i] - col[j] + ((m - row[i]) + (n - col[j]))
-
ถ้าเมทริกซ์[i, j] ไม่ใช่ศูนย์ ดังนั้น −
-
แคน :=แคน + 2
-
-
มิฉะนั้น
-
แคน :=แคน - 2
-
-
ret :=สูงสุดของ ret และ cand
-
-
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#includeใช้เนมสเปซ std;class Solution { สาธารณะ:int แก้ปัญหา (vector > &matrix) { int n =matrix.size (); int m =เมทริกซ์[0].size(); int ret =0; vector แถว (n); เวกเตอร์ col(m); รวมทั้งหมด =0; สำหรับ (int i =0; i > v ={{1,0,1},{0,1,0},{1,0,0}}; cout <<(ob.solve(v));}
อินพุต
<ก่อน>{{1,0,1},{0,1,0},{1,0,0}}ผลลัพธ์
8