Если ничего не напутал, то:
1) В каждой строке, как и в каждом столбце может стоять только одна конеладья. (k в таком случае будет порядка min(n, m))
2) На то ставить ли нашу конеладью в очередную клетку влияют только:
а) занятые столбцы
b) занята ли строка
c) где в в предыдущих двух строках расположены конеладьи (таких 2 штуки максимум из-за п. 1)
тогда можно сделать что-то типа такого:
dp[i][usedColumns][where1][where2][cnt]
количество способов расставить cnt конеладьей на первый i строках, с учетом того, что заняты столбцы соответствующие маске usedColumns и в предыдущей строке конеладья находится в столбце where1 (0 - если ее там нет, и 1..n есть), и where2 где находиться конеладья в предпредыдущей строке.
ответ будет sum(dp[n][mask][i][j][k] по всем mask, i, j)
Сложность получается порядка m * 2^n * k * n * n * n = m * 2^n * n^4. Думаю должно пройти.