我对博弈论相当陌生,并且只了解正常的 nim 游戏,您可以在没有条件的情况下从堆中移除石头,最后一个移除的玩家获胜。但后来我在阅读Topcoder 上的博弈论教程时遇到了一个很好的问题。要点如下:
你和一个朋友正在玩一个游戏,你轮流从一堆石头中取出石头。最初,每一堆的石头至少与其左边的那堆一样多。在整个游戏过程中必须保持此属性。每回合,你从一堆石头中取出一块或多块石头。您和您的朋友交替轮流,直到无法再进行有效的移动。最后一个采取行动的玩家赢得了比赛。请注意,如果您从一堆石头中取出所有石头,它仍然被视为一堆。如果在采取行动之后,无论您的朋友做什么,您最终都可以获胜,那么您就被称为“获胜的行动”。你得到一个 int[] 堆,代表从左到右每堆中的石头数量。轮到你搬家了。找到一个获胜的举动并将其作为格式为“TAKE s STONES FROM PILE k”的字符串返回 (仅为清晰起见引用),其中 s 和 k(从 0 开始的索引)都是不带前导零的整数。如果有多个获胜动作,请选择最小化 s 的一个。如果仍然存在平局,则选择使 k 最小的那个。如果不可能获胜,则返回字符串“YOU LOSE”(仅为清楚起见而引用)。
这里的去石有一个条件,就是要保持整体的非递减顺序,这成为了我想出一个逻辑的障碍。为此,我尝试阅读社论,但不幸的是无法理解其背后的想法。谁能用更简单的术语解释解决方案?