Lösung der Mindestanzahl an Zügen für das Problem des Turms von Hanoi mit vier Säulen

Titel:
Jetzt müssen Sie die Scheibe von der Spalte mit der Nummer 1 in die Spalte 3 verschieben, die Reihenfolge bleibt dieselbe

  • Hinweis: Sie können die große Festplatte während des Verschiebevorgangs nicht auf die kleine Festplatte legen, Sie können jeweils nur eine Festplatte verschieben
  • Jetzt gibt es einen Turm von Hanoi mit 4 Säulen. Wenn die Regeln gleich bleiben, fragen Sie, wie viele Züge erforderlich sind, um die Platte von Pfeiler 1 auf Pfeiler 4 zu bewegen.
  • Eingabeformat: eine Ganzzahl f, die angibt, dass n (1, f) annimmt
  • Ausgabeformat: Geben Sie f Zeilen aus und geben Sie die Mindestanzahl der erforderlichen Züge an, wenn n jeweils (1, f) benötigt.
    Big Guy-Erklärungslink: Vier-Säulen-Turm von Hanoi – AC-Lösung
    für optimale Anzahl von Bewegungen durch dynamische Programmierung (kein spezifischer Bewegungsprozess, nur die Anzahl der Male ausgegeben)
#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;
        }
	}

おすすめ

転載: blog.csdn.net/yzq199902/article/details/124906798