Рассмотрим квадрат 3 на 3 сетки неотрицательных целых чисел. Для каждой строки i
сумма целых чисел равна r_i
. Аналогично для каждого столбца j
сумма целых чисел в этом столбце равна c_j
. Поэтому экземпляр проблемы описывается 6
неотрицательными целыми числами.
Существует ли эффективный алгоритм для подсчета количества различных присваивания целых чисел в сетку даны строка и столбец сумма ограничений?
Очевидно, можно было бы перечислить все возможные матрицы неотрицательных целых чисел со значениями до sum r_i
и проверить ограничения для каждого, но это было бы безумно медленным.
Пример
Скажите, что ограничения строк 1 2 3
, а ограничения столбца 3 2 1
. Возможные целые сетки:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 1│0 0 1│0 0 1│0 1 0│0 1 0│0 1 0│0 1 0│1 0 0│1 0 0│1 0 0│1 0 0│1 0 0│
│0 2 0│1 1 0│2 0 0│0 1 1│1 0 1│1 1 0│2 0 0│0 1 1│0 2 0│1 0 1│1 1 0│2 0 0│
│3 0 0│2 1 0│1 2 0│3 0 0│2 1 0│2 0 1│1 1 1│2 1 0│2 0 1│1 2 0│1 1 1│0 2 1│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
На практике мой основной интерес заключается в том, что общая сумма сетки будет не более 100, но более общее решение было бы очень интересно.