Actualmente estoy tratando de resolver problem 18 of project Euler. El objetivo es:Problema con el problema Project Euler 18
Al comenzar en la parte superior del triángulo de abajo y moviéndose a números adyacentes en la fila de abajo, el volumen total máximo de arriba a abajo es 23.
3 7 4 2 4 6 8 5 9 3Esto es, 3 + 7 + 4 + 9 = 23.
Encontrar el volumen total máximo de arriba a abajo del triángulo a continuación:
75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
Me trataron de resolverlo con el siguiente algoritmo:
public static void main(String[] args) throws NumberFormatException, IOException {
int[][] values = readFile();
int depth = values.length - 2;
while (depth >= 0) {
for (int j = 0; j < depth; j++) {
values[depth][j] += Math.max(values[depth+1][j], values[depth+1][j+1]);
}
depth += -1;
}
values[0][0] += Math.max(values[1][0], values[1][1]);
System.out.println("The maximum path sum is: " + values[0][0]);
}
Los valores de la matriz contiene todos los números desde el triángulo donde values[0][0]
es el elemento en la fila superior y values[n][n]
es el último elemento en la última fila.
El algoritmo usa el enfoque de que si, por ejemplo, comienzo en la última fila y tengo la opción entre 04 + 63 y 62 + 63, la suma del campo en el que 63 se fijará en 125 porque esta es mayor cantidad Este algoritmo funciona para el triángulo pequeño, pero para el triángulo grande parece fallar. No estoy seguro por qué y agradecería cada pista.
Este es un problema realmente interesante. Parece que, en general, la suma puede no ser correcta porque las decisiones que conducirían a un punto máximo para un determinado paso pueden no conducir necesariamente a la suma máxima general. –
Por ejemplo: 75 + 95 + 47 = 217 (que sería la suma máxima para cualquier paso dado) es menor que 75 + 64 + 82 = 221 –
No soy una persona algoritmo, pero por mi propia curiosidad, ¿podría usted? ¿Necesitas visitar cada ruta posible y calcular su suma para resolver esto? – user489041