สมมติว่าเรามีเมทริกซ์ไบนารี เราต้องหากำลังสองที่ใหญ่ที่สุดของ 1 ในเมทริกซ์ที่ให้มา
ดังนั้นหากอินพุตเป็นแบบ
1 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
แล้วผลลัพธ์จะเป็น 16
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- res :=0
- สำหรับ i ในช่วง 0 ถึงขนาดของเมทริกซ์ ทำ
- res :=สูงสุดของความละเอียดและเมทริกซ์[i, 0]
- สำหรับฉันในช่วง 0 ถึงขนาดของเมทริกซ์[0] ทำ
- res :=สูงสุดของ res และ matrix[0, i]
- สำหรับ i ในช่วง 1 ถึงแถวนับของเมทริกซ์ ทำ
- สำหรับ j ในช่วง 1 ถึงจำนวนคอลัมน์ของเมทริกซ์ ให้ทำ
- ถ้า matrix[i, j] เหมือนกับ 1 แล้ว
- เมทริกซ์[i, j] =ค่าต่ำสุดของ (เมทริกซ์[i - 1, j], เมทริกซ์[i - 1, j - 1] และเมทริกซ์[i, j - 1]) + 1
- res =สูงสุดของความละเอียดและเมทริกซ์[i, j]
- ถ้า matrix[i, j] เหมือนกับ 1 แล้ว
- สำหรับ j ในช่วง 1 ถึงจำนวนคอลัมน์ของเมทริกซ์ ให้ทำ
- ผลตอบแทน^2
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
คลาสโซลูชัน:def แก้ปัญหา(ตัวเอง, เมทริกซ์):res =0 สำหรับฉันในช่วง (len(เมทริกซ์)):res =max(res, matrix[i][0]) สำหรับฉันในช่วง (len (เมทริกซ์) [0])):res =max(res, matrix[0][i]) for i in range(1, len(matrix)):for j in range(1, len(matrix[0])):if เมทริกซ์[i][j] ==1:เมทริกซ์[i][j] =นาที(เมทริกซ์[i - 1][j] เมทริกซ์[i - 1][j - 1] เมทริกซ์[i][j - 1]) + 1 res =max(res, matrix[i][j]) return res * resob =Solution()matrix =[ [1, 0, 0, 0, 0, 1, 1], [0, 0 , 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1 , 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0]]print(ob.solve(เมทริกซ์))
อินพุต
<พรี>เมทริกซ์ =[ [1, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0 , 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0 ] ]ผลลัพธ์
16