Cho bảng nhị phân 10×10. Có năm tờ giấy vuông cho mỗi kích thước 1×1,2×2,…,5×5. Mỗi tờ phải nằm trọn trong bảng, chỉ phủ ô 1, và không chồng lên tờ khác. Hãy phủ toàn bộ ô 1 bằng ít tờ nhất.
Input
Gồm 10 dòng, mỗi dòng chứa 10 số 0 hoặc 1.
Output
In số tờ ít nhất; nếu không thể phủ thì in −1.
Constraints
Bảng luôn có kích thước 10×10.
Có tối đa 5 tờ cho mỗi cỡ từ 1 đến 5.
Scoring
Subtask 1 (50%): Các ô 1 chỉ nằm trong vùng 6×6 góc trên trái.
Giải thích: Một tờ 2×2 phủ đúng bốn ô được chọn, nên đáp án là 1.
Lời giải tóm tắt
Ý tưởng: Luôn chọn ô 1 đầu tiên theo thứ tự hàng-cột. Vì mọi ô đứng trước đã được xử lý, tờ giấy phủ ô này trong một nghiệm còn lại phải có góc trên trái chính tại ô đó.
Thuật toán: DFS tìm ô 1 đầu tiên, rồi thử các cỡ từ 5 xuống 1 nếu còn giấy và hình vuông tương ứng chỉ chứa 1. Đổi vùng sang 0, đệ quy và hoàn tác. Khi không còn ô 1, cập nhật số tờ nhỏ nhất.
Tính đúng đắn: Mọi nghiệm phải phủ ô chưa xử lý đầu tiên bằng đúng một trong các cỡ mà DFS thử. Mỗi nhánh chỉ đặt giấy trong vùng hợp lệ, không chồng lấn, và hoàn tác khôi phục trạng thái cha. Do đó DFS xét mọi cách phủ hợp lệ; lấy số tờ nhỏ nhất cho đáp án tối ưu.
Độ phức tạp: Cây tìm kiếm có tối đa năm lựa chọn tại mỗi ô bắt buộc; bộ nhớ đệ quy O(100).