Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- link submit : https://vn.spoj.com/problems/BGBOARD/
- - Bắt đầu từ ý tưởng trâu :
- + For từng 2 hàng row1 và row2 và kiểm tra xem bảng hình chữ nhật lớn nhất có thể lấy được mà được giới hạn bởi 2 hàng
- này là hình nào. Xử lí cái này mất n^2
- --> đpt là O(n^2)
- - Gọi dp(l, r, col) là cột xa nhất thỏa mãn khi xây từ hàng l -> r và xây đến cột col rồi
- - Cải tiến :
- + Ta cũng sẽ for row1 và row2 để làm 2 cái biến nhưng trong phần xử lí để get ra hình chữ nhật ta sẽ chuẩn bị trước
- + Khi đến cột col thì ta muốn biết xem tất cả các ô trong cột ấy xuất hiện lần gần nhất là ở cột nào, thì trong lần này
- ta chỉ cần xét 2 ô a[row1][col] và a[row2][col] xuất hiện gần nhất ở đâu trên 2 hàng row1 và row2 , bởi các ô nằm trên
- cột mà khác 2 ô trên sẽ được tính trước trong dp(l+1, r, col) và dp(l, r-1, col) rồi.
- + Còn việc khi ta cần xem xét là sao chỉ cần check 2 (row1, col) và (row2, col) có xuất hiện trong 2 hàng row1, row2
- không ? vì nếu mình check cho (row1, col) xuất hiện trên mọi hàng i thì là không cần thiết tại vì điều này nó cũng đã
- được tính trước trong dp(l+1, r, col) và dp(l, r-1, col) rồi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement