Cómo resolver ADAGAME en SPOJ

Puedes resolverlo usando programación dinámica. (DP)

  1. Los parámetros pueden ser el valor actual y el número de iteraciones.
  2. Caso base: si las iteraciones son iguales a las iteraciones dadas, verifique si el número actual es mayor o no, luego regrese en consecuencia.
  3. Después de tomar cada número, puede cambiarlo a cuatro valores posibles en cuestión
    “El número 3590 se puede ampliar a: 4590,3690,3500 o 3591”.
  4. para que pueda hacerlo de muchas maneras con las que se sienta cómodo.
  5. Llame a la función con un nuevo valor y aumentando el número de iteración.

Es una solución fácil. Ve a por ello.

NB: soy un poco débil con la solución de abajo hacia arriba, así que estoy dando un enfoque de arriba hacia abajo

Para el tercer punto ( puedes pensar así ):

cadena tst1;

REP (i, 0, 4) {

if (tst1 [i] == ‘9’) {

tst1 [i] = ‘0’;

deb (tst1);

tst1 [i] = ‘9’;

}

más {

tst1 [i] = tst1 [i] + 1; deb (tst1);

tst1 [i] = tst1 [i] – 1;

}

}

Sea n el número actual y el turno actual sea t:

MinMax(n,t)={

[matemáticas] [/ matemáticas] ans=0;

for each of four combinations N of n :

if turn is odd ie, Ada's turn :

ans=max(ans,MinMax(N,t+1)) //Ada tries to maximize

else if turn is even ie, Vinit's turn :

ans=min(ans,MinMax(N,t+1)) //Vinit tries to minimize

return ans;

}

El código anterior devuelve el número más óptimo

Si el número final obtenido arriba es mayor que el número original, Ada gana más, Vinit gana

¡Pero tienes que memorizarlo o obtendrás TLE!

Recordarlo usando dp. Inicialice dp de la siguiente manera:

dp[n][t]=-1 for n = 1 to 10000 and t= total number of turns allowed

Entonces, después de podar su pseudocódigo ahora se convierte en:

MinMax (n, t) = {
ans = 0;
if (t> max_no_of_turns) devuelve n; //caso base
if (dp [n] [t]> = 0) devuelve dp [n] [t];
para cada una de las cuatro combinaciones N de n:
si el turno es impar, es decir, el turno de Ada:
ans = max (ans, MinMax (N, t + 1)) // Ada intenta maximizar
si el turno es par, es decir, el turno de Vinit:
ans = min (ans, MinMax (N, t + 1)) // Vinit intenta minimizar
devuelve dp [n] [t] = ans;
}

Espero que responda tu pregunta. ¡Feliz codificación!

El problema de ADFRUITS se puede resolver utilizando LCS (subsecuencia común más larga), si no conoce LCS, puede consultar estos enlaces:

  • Programación Dinámica | Set 4 (Subsecuencia común más larga) – GeeksforGeeks

Entonces, en este problema, primero estamos calculando el LCS de dos cadenas que nos han dado y luego, usando el rastreo, encontramos los índices en ambas cadenas que contribuyen al LCS. almacenaremos estos valores en una matriz temporal bool.

Tomemos un ejemplo de manzana y pera, sabemos que en la aplicación son comunes las peras.

entonces para apple ==> falso falso verdadero falso verdadero

y para pera ==> verdadero verdadero falso falso

Luego, construiremos nuestra cadena de resultados al considerar primero todos los alfabetos hasta que seamos verdaderos.

lo mismo que hacemos para nuestra segunda cadena, luego incluya los alfabetos que forman parte de LCS y repita estos pasos hasta llegar al final de ambas cadenas.

para el código, consulte esto: Frutas avanzadas – ADFRUITS

More Interesting

¿Cuáles son los algoritmos posibles que se pueden usar para ordenar cada cubo en el algoritmo de clasificación de cubo?

¿Cuál es la aplicación en tiempo real de árboles y gráficos en estructuras de datos?

¿Cuál es el mejor algoritmo para elegir para la tarea de aprendizaje automático de agrupar una base de datos de listados de casas con sus propiedades (algunos de los cuales son binarios y otros son numéricos y preferiblemente con la primera imagen)?

¿Cómo puedes visualizar algoritmos?

Si U = {todos los enteros positivos menores o iguales a 30} y N = {todos los números impares menores o iguales a 19}, ¿qué es N 'y n (N')?

¿Cuáles son las mejores rutinas que podemos adoptar para ser buenos en la programación / diseño de algoritmos?

Cómo crear una ordenación rápida en C

¿Cómo funcionan los mecanismos del filtro de revisión de Yelp?

¿Cuál es el algoritmo más difícil que has implementado? ¿Por qué fue difícil? ¿Cuánto tiempo te llevó?

¿Cuáles son algunos algoritmos geniales que se pueden usar para el reconocimiento de objetos y cómo los usamos?

¿Qué es mejor en C #, mantener una variable con un tamaño de matriz o llamar a la longitud de la matriz?

No sé nada sobre algoritmos. Por donde puedo empezar

¿Cuál es el mejor algoritmo para ocultar datos en texto?

¿Cuánto de los algoritmos de Windows 8 y 10 se toman de versiones anteriores de Windows?

Encuentre la suma máxima del subconjunto de longitud k de un conjunto dado, de modo que la suma sea estrictamente menor que M