トピックスアドレス
クラシック再帰の問題。
解決N(1 <= N <= 12) プレート\(4 \)ハノイタワー(ハノイのタワー)に必要なステップの最小数を発行?(1-12各回答は1行を占めました)
問題の解決策
ハノイ元の問題は、\(D [i]が\)カラム3を表す\(Iは\)プレートのステップの最小数。あなたは言葉を忘れていない場合:
\ [D [I] = D [I-1] * 2 + 1 \]
この式は、まだ非常に明白です。
我々は、セット\を(F [I] \)カラム4を表し\(Iは\)プレートのステップの最小数。次にあります。
\ [F [I] = \テキスト{分} \ {F [j] * 2 + D [IJ] \}(1 <= jの<= I)\]
その後、我々は、この式近いカンカンを取る([J] \ F)\を指す(jは\)\に配置されたプレート(\ \のB)上のすべての3つの塔使用塔に、皿の残りの\を( D \)カラムで、次に\(Bの\)カラム上で\(J \)プレート上で\()Dの\の塔。
コード
#include<bits/stdc++.h>
#define N 15
using namespace std;
int n;
int f[N],d[N];
int main()
{
memset(f,0x3f,sizeof(f));
d[1] = f[1] = 1; puts("1");
for(int i=2;i<=12;++i) {
d[i] = d[i-1]*2 + 1;
for(int j=1;j<=i;++j) {
f[i] = min(f[i],f[j]*2+d[i-j]);
}
printf("%d\n",f[i]);
}
return 0;
}
あなたが理解すれば、我々は考えることができます(nは\)\プレート\(m個\)タワーに近づきます。
我々はセット([I] [J fは\を \]) である(iは\)\、塔\(J \)ステップの最小数をプレートし、以下のとおりです。
\ [F [I] [J] = \テキスト分{} \ {F [i]が[K] * 2 + F [I-1] [JK] \} \]
実際には、原理は同じです。
おやすみなさい、よく眠ります!