Dos jugadores juegan el siguiente juego: hay N piedras en la mesa, el jugador puede tomar 1 o 2 piedras (si N mod 3 = 0), 1 o 3 (si N mod 3 = 1) y 1, 2 o 3 ( si N mod 3 = 2). ¿Cómo determino al ganador en el juego?

EDITAR: No me di cuenta de que esta era una pregunta de Programación Dinámica, y como tal, mi respuesta en realidad no puede responder la pregunta. No obstante, lo dejaré, en caso de que ayude a alguien. [/editar]

Me gustaría asumir la respuesta del Islam y completarla con una prueba.
Veamos qué sucede en un pequeño conjunto de situaciones:

Si [matemáticas] n = 1 [/ matemáticas], puedo tomar 1 piedra y dejar al oponente sin piedra para tomar, por lo tanto, el oponente pierde. Esta es una posición ganadora.
Si [matemáticas] n = 2 [/ matemáticas], puedo tomar 2 piedras y dejar al oponente sin piedra para tomar, por lo que el oponente pierde. Esta es una posición ganadora.
Si [matemáticas] n = 3 [/ matemáticas], puedo tomar 1 piedra o 2 piedras. En ambos casos, el oponente se enfrentará a una posición ganadora. Así pierdo.

Entonces propongamos un lema y demostrémoslo:
Lema : Para cualquier [matemática] k [/ matemática], [matemática] n = 3k + 1 [/ matemática] es una posición ganadora, [matemática] n = 3k + 2 [/ matemática] es una posición ganadora, y [matemática ] n = 3k + 3 [/ math] es una posición perdedora. (En otras palabras, [matemática] n \ equiv 1 [/ matemática] y [matemática] n \ equiv 2 [/ matemática] son ​​posiciones ganadoras; [matemática] n \ equiv 0 [/ matemática] es una posición perdedora).

Por inducción, demostramos que es cierto para cualquier [math] k \ ge 0 [/ math]. El lema es verdadero para [matemáticas] k = 0 [/ matemáticas] (como se vio anteriormente), así que supongamos que es verdadero al menos algún valor [matemáticas] k_0 [/ matemáticas].
Veamos qué sucede en el caso [math] k_0 + 1 [/ math].

Si [math] n = 3 (k_0 + 1) + 1 = 3k_0 + 4 [/ math], entonces [math] n \ equiv 1 [/ math] y puedo tomar 1 piedra o 3 piedras (de las reglas que usted dio). Si tomo 1 piedra, el oponente queda en la posición [matemáticas] n = 3k_0 + 3 [/ matemáticas], que, según nuestra hipótesis de inducción, es una posición perdedora. Por lo tanto, esta es una posición ganadora.

Si [matemáticas] n = 3 (k_0 + 1) + 2 = 3k_0 + 5 [/ matemáticas], entonces [matemáticas] n \ equiv 2 [/ matemáticas] y puedo tomar 1 piedra, 2 piedras o 3 piedras (de las reglas que le diste) Si tomo 2 piedras, el oponente queda en la posición [matemáticas] n = 3k_0 + 3 [/ matemáticas], que, según nuestra hipótesis de inducción, es una posición perdedora. Por lo tanto, esta es una posición ganadora.

Si [matemática] n = 3 (k_0 + 1) + 3 = 3k_0 + 6 [/ matemática], entonces [matemática] n \ equiv 3 [/ matemática] y puedo tomar 1 piedra o 2 piedras (de las reglas que usted dio). Si tomo 1 piedra, el oponente queda en la posición [matemáticas] n = 3k_0 + 5 [/ matemáticas], que es una posición ganadora; si tomo 2 piedras, el opoonente queda en la posición [matemáticas] n = 3k_0 + 4 [/ matemáticas], que también es una posición ganadora. Por lo tanto, no importa lo que elija, el oponente gana. Por lo tanto, esta es una posición perdedora.

¡Esto concluye nuestra prueba y el lema es cierto!

Si está en una posición X, puede ser una posición ganadora o una posición perdedora. Vamos a definir ganar [X]: verdadero si X es una posición ganadora, falso de lo contrario.

¿Cuándo es una posición una posición ganadora? Cuando puede hacer un movimiento a una posición Y, que es una posición perdida. Así que si:

  • n% 3 == 0: win [X] =! ​​win [X – 1] || ! ganar [X – 2]
  • n% 3 == 1: win [X] =! ​​win [X – 1] || ! ganar [X – 3]
  • n% 3 == 2: win [X] =! ​​win [X – 1] || ! win [X – 2] || ! win [X-3]

Tenga en cuenta que también necesita definir los casos base, que son triviales.

¡Espero que haya sido útil!

Asumiré que el perdedor es el que no puede hacer un movimiento.
Este es un juego de Nim con reglas especiales. Simplemente aplica la regla:

  1. Una posición está ganando si puede moverse al menos a una posición perdedora
  2. Una posición está perdiendo si solo puede moverse a posiciones ganadoras.

Ejecutas una simulación y descubres que una posición está ganando si n% 3 == 1 o n% 3 == 2

Código: Ideone.com

Creo que esta es una permutación del Teorema del resto chino: el ejemplo original de Sun Tzu supuestamente involucraba la extracción de huevos de una canasta; leer sobre el mismo podría arrojar ideas.

More Interesting

¿Cuál es el tipo de algoritmo utilizado para resolver el problema de 8 reinas?

¿Cuál es la forma estándar de resolver problemas?

Dado un laberinto cuadrado, cada entrada en el laberinto es una celda abierta 'O' o una pared 'X'. Una rata puede viajar a sus ubicaciones adyacentes (izquierda, derecha, arriba y abajo), pero para llegar a una celda, debe estar abierta. Dadas las ubicaciones de las ratas, ¿puedes averiguar si todas las ratas pueden alcanzar a las demás?

¿Cuál ha sido la experiencia general con el producto de optimización creativa dinámica (DCO) de Tumri?

Cómo representar un número binario, como 110110011, en exceso de código 511

¿Cuál es la lógica detrás de los algoritmos de ajuste de aprendizaje automático?

Cómo verificar en C ++ si varias cadenas tienen una coincidencia con una sola cadena de una sola vez

¿Tengo que estudiar matemáticas discretas, algoritmos y estructura de datos para convertirme en un buen desarrollador de Android?

¿Qué estrategia debo usar para resolver esta pregunta? - HackerEarth | Iniciar sesión (Equipo del proyecto | HackerEarth)

Dado un volumen que consiste en un número de ubicaciones dentro de un espacio tridimensional definido, y a cada una de estas ubicaciones se le asigna algún número, ¿hay alguna métrica obvia que se pueda aplicar que mida la complejidad de la distribución de las mediciones?

¿Cuál sería un algoritmo para aplicar un filtro rosa a una imagen?

¿Qué es el recorrido del árbol y por qué los necesita?

¿Cuáles son algunas aplicaciones del mundo real de parábolas?

¿Dónde y cómo puedo aprender sobre la creación / comprensión de algoritmos de negociación de acciones?

¿Cuántos tipos de algoritmos SVM existen?