POJ1958汉诺塔+
Posted wzj-xhjbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ1958汉诺塔+相关的知识,希望对你有一定的参考价值。
题目大意:给定一个四个柱子的汉诺塔,N 个盘子,求最少多少步移动到另一个柱子上。
题解:(f[n]=min(2*f[i]+d[n-i])),其中 (d[i]) 为汉诺三塔最小移动次数。M 塔同理。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=15;
int d[maxn],f[maxn];
void solve(){
memset(f,0x3f,sizeof(f));
for(int i=1;i<=12;i++)d[i]=(1<<i)-1;
f[1]=1;
for(int i=2;i<=12;i++)
for(int j=1;j<i;j++)
f[i]=min(f[i],2*f[j]+d[i-j]);
for(int i=1;i<=12;i++)printf("%d
",f[i]);
}
int main(){
solve();
return 0;
}
以上是关于POJ1958汉诺塔+的主要内容,如果未能解决你的问题,请参考以下文章
[POJ1958]Strange Towers of Hanoi
Prob.2[动态规划+递推+划归思想的应用]POJ 1958 Strange Towers Of Hanoi Upd:2020.3.1
POJ 1958 Strange Towers of Hanoi 解题报告