Creo que obtendrá una serie de respuestas aquí hablando sobre la solución real del problema, así que subiré una capa y hablaré sobre cómo hice para encontrar una solución.
Leí el enunciado del problema y luego no tuve ninguna idea particularmente buena sobre cómo encontrar la solución óptima. Parecía estar teniendo un mal día (esta fue cómodamente mi peor calificación para Code Jam), así que decidí centrarme en la pequeña entrada que tenía límites superiores bastante pequeños. Con un poco de cuidado, pude hacer que una búsqueda amplia funcionara lo suficientemente rápido para esto (¡así que básicamente fuerza bruta!) Y luego resolví la pequeña entrada, lo que significaba que me había calificado.
Agregué el registro a mi solucionador BFS para poder ver lo que estaba sucediendo, y luego inventé muchos casos de prueba diferentes y vi cómo se veía una solución óptima para cada uno. Noté que el algoritmo casi siempre usaba una cantidad de minutos especiales al principio, donde distribuía los panqueques en una cantidad de montones iguales (algunos podrían no ser del todo iguales, por supuesto) y luego simplemente esperaba mientras se comían. Estaba dispuesto a apostar que las pequeñas desviaciones que estaba viendo en algunos casos de prueba eran equivalentes a las soluciones que de hecho coincidían con este patrón.
- ¿La informática teórica tiene algo que ver con la minería de datos?
- ¿Qué pasaría si alguien prueba P = NP o P! = NP?
- Informática teórica: ¿son todos los lenguajes P decidibles? ¿Son todos los idiomas NP decidibles?
- ¿Cuál es la razón por la cual las instalaciones no cambian su esquema de cifrado, de modo que cuando se publique una prueba de P = NP no se verán afectados?
- ¿Cómo se diseñan los CAS (sistemas de álgebra computacional)?
Experimenté con esta suposición probando todos los posibles límites de tamaño de pila hasta el máximo (1000) y obteniendo el mejor resultado. Comparé el resultado de esto con los del solucionador BFS en la entrada pequeña y estuvo de acuerdo en todos los casos, así que seguí adelante y lo usé para la entrada grande. Resultó ser correcto.
Noto todos los años en Code Jam que a menudo vale la pena ir con una corazonada y solo probarlo en entradas para las que conoce la respuesta, en lugar de razonar hasta que esté seguro de que su solución es la correcta. A menudo se necesita más tiempo para presentar una prueba que para probar algo.