Роботы на складе: сколько расстановок

тема: Перебор с возвратом · уровень: средний

Условие

На складе школьной команды по робототехнике стоит квадратная сетка из клеток. В некоторые клетки нельзя ставить роботов (там ящики). Вы хотите поставить ровно K одинаковых роботов так, чтобы они не мешали друг другу.

Робот «мешает» другому, если они стоят в одной строке или в одном столбце (как ладьи в шахматах). Ящики не экранируют: важно только совпадение строки или столбца.

Посчитайте, сколькими способами можно поставить ровно K роботов.

Формат ввода

В первой строке два целых числа N и K (1 ≤ N ≤ 8, 0 ≤ K ≤ N). Далее идут N строк по N символов каждая.

Формат вывода

Выведите одно целое число — количество расстановок ровно из K роботов.

Ограничения

1 ≤ N ≤ 8, 0 ≤ K ≤ N. Клетки с # запрещены. В одной строке и в одном столбце может стоять не более одного робота.

Пример

Ввод:

4 2
....
....
....
....

Вывод:

72

Разберись руками

Есть поле 4×4 без ящиков (везде точки). Нужно поставить ровно 2 одинаковых робота так, чтобы они не оказались в одной строке или в одном столбце.

Идея: Сначала решаем, какие строки будут заняты роботами, и какие столбцы будут заняты. Потом для каждого такого выбора считаем, сколькими способами можно раздать выбранные столбцы выбранным строкам так, чтобы в каждой строке и каждом столбце оказался не больше один робот.

Решить задачу с автопроверкой на Python →

Куда дальше