public void calcularSolucion() {
		int n = cartas.length;
		for ( int i = 0; i < n; i++ ) {
			cache[i][i] = cartas[i];
			jugadas[i][i].desdeIzquierda( 1 );
		}

		for ( int columna = 1; columna < n; columna++ ) {
			for ( int diagonal = 0; diagonal < n - columna; diagonal++ ) {
				int i = diagonal;
				int j = columna + diagonal;
				int min_ij = Integer.MAX_VALUE;
				int puntos = 0;
				for ( int k = i; k <= j; k++ ) {
					int a = 0, b = 0;
					puntos += cartas[k];
					if ( k + 1 <= j ) a = cache[k + 1][j];
					if ( k - 1 >= i ) b = cache[i][k - 1];
					if ( min_ij < a && min_ij < b ) continue;
					if ( a < b ) {
						jugadas[i][j].desdeIzquierda( k - i + 1 );
						min_ij = a;
					} else {
						jugadas[i][j].desdeDerecha( j - k + 1 );
						min_ij = b;
					}
				}
				cache[i][j] = puntos - min_ij;
			}
		}
	}