Título:
ahora debe mover el disco en la columna número 1 a la columna 3, el orden sigue siendo el mismo
- Nota: no puede colocar el disco grande en el disco pequeño durante el proceso de movimiento, solo puede mover un disco a la vez
- Ahora hay una Torre de Hanoi con pilares 4. Cuando las reglas siguen siendo las mismas, pregunte cuántos movimientos se requieren para mover el plato del pilar 1 al pilar 4.
- Formato de entrada: un entero f, que indica que n toma (1, f)
- Formato de salida: líneas de salida f, que indican el número mínimo de movimientos necesarios cuando n toma (1, f) respectivamente.
Enlace de explicación de Big Guy: Torre de Hanoi de cuatro pilares: solución de CA
para un número óptimo de movimientos mediante programación dinámica (sin proceso de movimiento específico, solo el número de veces de salida)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define N 100
#define INF 0x3f3f3f3f
typedef long long ll;
ll dp[N];
int optimalPath[N];
int main()
{
int n;
cin>> n;
for (int i = 1; i <= n; i++)
dp[i] = INF;
dp[1] = 1;
cout <<dp[1]<<endl;
dp[2] = 3;
cout <<dp[2]<<endl;
for(int s=3;s<=n;s++){
for (int i = 3; i <= s; i++)
{
for (int k = 1; k <= i; k++)
{
ll tmp = 2 * dp[i - k] + (ll)pow(2, k) - 1;
if (dp[i] > tmp)
{
dp[i] = tmp;
optimalPath[i] = k;
}
}
}
cout <<dp[s]<<endl;
}
}