您有一组n个对象,其中给出了整数位置.一组对象是同一位置的一组对象(不一定是该位置的所有对象:单个位置可能有多个组).对象可以向左或向右移动,目标是移动这些对象以形成k组,并在移动的最小距离的情况下移动.
例如:
我一直在尝试使用贪婪的方法(通过计算哪个移动最短),但这不起作用,因为每次移动都涉及两个可以移动的元素.我还没有能够制定动态编程方法,但我正在研究它.
例如:
n = 13 = b1101
Run Code Online (Sandbox Code Playgroud)
只有可能i = 1
k = n - 2^i = 11 = b1011
Run Code Online (Sandbox Code Playgroud)
同样,只有i = 2
k = n - 2^i = 7 = b111
Run Code Online (Sandbox Code Playgroud)
由于玩家A无法再进行任何动作,因此玩家B获胜
我推断,在任何步骤中,我们只能选择一个i,这样在n的二进制表示中的相应位置处有一个0.
例如:如果n = 1010010,那么我只能是{0,2,3,5}.
但是我无法继续前进.极小极大算法并不是让我感到惊讶.我会感激任何帮助.谢谢你提前
algorithm ×2