Tóm tắt:
Đầu tiên, tại mỗi ô ta tìm hình thoi có bán kính lớn nhất mà không có 2 ô
có cọc trùng nhau. Sau đó tính tổng số cọc trong mỗi hình thoi tìm đuợc
ở trên rồi lấy max để được kết quả.
Phần 1 được làm bằng QHĐ, còn phần 2 ta xoay bảng lại 45 độ để tính số cọc.
Sau đây là chi tiết lời giải.
Phần 1:
Chia hình thoi thành 4 tam giác vuông.
Tính \(F1[i][j]\) là chiều dài cạnh của tam giác vuông cân có đỉnh tại ô \((i,j)\)
,trong tam giác không có 2 ô có cọc kề nhau và có hướng như hình. Dĩ nhiên, tam giác đó phải lớn nhất
có thể.
Để cho giống cách tính chu vi của hình thoi, ta trừ chiều dài cạnh cho 1.
Ta có:
- \(F1[i][j] = min(F1[i-1][j], F1[i][j-1]) + 1\), khi trong 3 ô: \((i,j), (i-1, j), (i, j-1)\)
không có 2 ô có cọc nào kề nhau.
- Ngược lại, \(F1[i][j] = 0\).
Định nghĩa và tính tương tự với \(F2\), \(F3\) và \(F4\). Sau đó, tại ô \((i,j)\), bán kính hình thoi
lớn nhất cần tìm là \(min(F1[i][j], F2[i][j], F3[i][j], F4[i][j])\).
Phần 2: Xoay bảng để đếm số cọc
Ta xoay bảng như sau:
Công thức xoay bảng là \(F(i, j) = (1001 + i - j, 1 + i + j)\), tức là ô \((i,j)\) trong bảng ban đầu sẽ có
tọa độ \((1001+i-j,1+i+j)\) trong bảng xoay.
Sau khi xoay, cần có cách tính số cọc trong hình thoi tâm \((i,j)\), bán kính \(r\).
Dễ thấy hình thoi sau khi xoay sẽ trở thành hình vuông, có đỉnh phải dưới tương ứng với đỉnh dưới của hình
thoi ban đầu, và độ dài cạnh là \(2r+1\).