В поисках лучшего подхода Модифицированного Нима - PullRequest
1 голос
/ 06 мая 2019

В конечном счете, это игра Нима с определенной модификацией.

Правила таковы:

Есть два игрока A и B.

В игре участвуют две груды матчей. Первоначально первая куча содержит N совпадений, а вторая - M совпадений.

Игроки ходят по очереди; А играет первым.

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

Допускается удаление X совпадений из кучи, только если количество совпадений в другой куче делит X.

Игрок, который берет последний матч из любой кучи, выигрывает.

Оба игрока играют оптимально.

Мой дубль:

допустим, у нас есть две кучи 2 7. у нас есть 3 случая, чтобы уменьшить вторую кучу до уровня: 2 1, 2 3, 2 5 Если А играет оптимально, он / она пойдет на 2 3, так что единственное у B остается шанс сделать 2 1, а затем A может пойти на 0 1 и выиграть игру. Основой решения является то, что если A или B когда-либо сталкиваются с какой-либо ситуацией, когда они могут напрямую проиграть на следующем шаге, тогда они будут стараться изо всех сил избегать этого и использовать ситуацию в своих интересах, просто выходя из состояния на 1 шаг до этого. проигрышная стадия.

Но этот подход не работает для некоторых неизвестных тестовых случаев, есть ли лучший способ найти победителя или любой другой тестовый случай, который не поддается этой логике.

1 Ответ

1 голос
/ 07 мая 2019

Это классическая проблема динамического программирования.Во-первых, найдите повторяющиеся отношения, которые описывают результат игры в терминах небольших игр.Здесь ваши параметры X и Y, где X - количество совпадений в одном стеке, а Y - в другом.Как мне уменьшить эту проблему?

Итак, предположим, что это мой ход с совпадениями X, и предположим, что Y делится на числа a1, a2 и a3, а x делится на b1, b2, b3.Тогда у меня есть шесть возможных поворотов.Задача сводится к решению для (X-a1, Y) (X-a2, Y) (X-a3, Y), (X, Y-b1), (X, Y-b2), (X, Y-b3).Как только эти шесть небольших игр будут решены, и если одна из них будет для меня выигрышной, тогда я сделаю соответствующий ход и выиграю игру.
Есть еще один параметр, чей это ход.Это удваивает размер решаемых проблем.
Ключ в том, чтобы найти все возможные ходы и повторить для каждого из них, сохраняя хранилище уже решенных игр для эффективности.

Базовый вариант нужно выяснить естественным образом.

...