Gần đây trong một cuộc cạnh tranh mã hóa, tôi đã xem qua câu hỏi này.Kết hợp theo chiều dọc của các ô
Chúng tôi có 1000 ô trong đó mỗi ô là ma trận 3x3. Mỗi ô trong ma trận có giá trị số nguyên từ 0 đến 9, biểu thị độ cao của ô. Vấn đề là để tìm các cặp tối đa như vậy mà chúng phù hợp hoàn hảo. Gạch có thể được luân chuyển để phù hợp. Bằng cách phù hợp trong nó có nghĩa là cho ngói A và gạch B
A [i] + B [i] = const cho i = 0-8
Cách tiếp cận tôi nghĩ cho vấn đề này là tôi có thể duy trì giá trị băm tương ứng với từng ô. Sau đó, tôi sẽ tìm thấy sự kết hợp có thể có của gạch mà có thể là một phù hợp có thể và nhìn nó trong hashtable.
Ví dụ: Đối với hình xếp bên dưới
5 3 2 4 6 7 5 7 8
4 8 9 matches with 5 1 0 for const = 9 & with 6 2 1 for const=10
1 4 5 8 5 4 9 6 5
cho ô này 'const' sẽ từ 9 (thêm 0 đến phần tử tối đa) thành 10 (thêm 9 vào phần tử tối thiểu). Vì vậy, tôi sẽ nhận được hai kết hợp có thể cho gạch mà tôi sẽ nhìn lên trong bảng.
Nhưng phương pháp này là tham lam và không đưa ra câu trả lời mong muốn và tôi cũng không thể nghĩ ra một hàm băm phù hợp sẽ xem xét tất cả các phép quay có thể.
Vì vậy, cách tiếp cận tốt để giải quyết vấn đề này là gì?
Tôi chắc chắn có một cách bạo lực để giải quyết vấn đề này nhưng tôi đã thực sự tự hỏi liệu một giải pháp khả thi cho vấn đề tồn tại trên các dòng "theo chiều ngược lại" k ".
Có vấn đề với giải pháp tầm thường chỉ kiểm tra tất cả các cặp có thể không? Nếu không có, tại sao bạn không sử dụng nó thay vào đó? – kraskevich