Advertisement
trungore10

sol_BGBOARD-spoj

Sep 24th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. link submit : https://vn.spoj.com/problems/BGBOARD/
  2.  
  3. - Bắt đầu từ ý tưởng trâu :
  4. + 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
  5. này là hình nào. Xử lí cái này mất n^2
  6. --> đpt là O(n^2)
  7.  
  8. - 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
  9. - Cải tiến :
  10. + 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
  11. + 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
  12. 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
  13. 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.
  14. + 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
  15. 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 đã
  16. đượ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