Это игра, в которой карты 1-50 раздаются двум игрокам, каждый из которых имеет 10 карт в случайном порядке. Цель состоит в том, чтобы отсортировать все карты, и тот, кто сделает это первым, становится победителем. Каждый раз, когда человек может забрать карту из колоды, он должен заменить существующую карту. Игрок не может обменять свои карты. Т.е. только он может заменить свою карту картой из колоды. Сброшенная карта вернется в колоду в случайном порядке. Теперь мне нужно написать программу, которая делает это эффективно.
Я подумал о следующем решении
1) найти все подпоследовательности, которые находятся в порядке возрастания в данном наборе карт
2) для каждой подпоследовательности вычисляют вес, основанный на вероятности отсутствия путей, которые могут решить проблему.
Например: если у меня есть подпоследовательность 48,49,50 с индексом 2,3,4, вероятность завершения задачи с этой подпоследовательностью равна 0. Таким образом, вес умножается на 0.
Точно так же, если у меня есть последовательность 18, 20, 30 с индексом 3, 4, 5, то ни один из возможных способов завершения игры - это 20 возможных карт для выбора на 6-10 и 17 возможных карт для выбора на первые 2 позиции,
3) для каждой карты из колоды я отсканирую список и пересчитаю вес последующих, чтобы найти лучшее соответствие.
Ну, у этого решения может быть много недостатков, но я хотел знать,
1) Учитывая подпоследовательность, как найти вероятность возможных путей завершения игры?
2) Каков наилучший алгоритм для поиска всех подпоследовательностей?