Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พลิกพรีเควลเมทริกซ์ใน C ++


สมมติว่าเรามีเมทริกซ์ไบนารีหนึ่งตัว เราต้องหาจำนวนสูงสุดของ 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