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汉诺塔+的主要内容,如果未能解决你的问题,请参考以下文章

《算法竞赛进阶指南》0x00 汉诺塔四塔问题 递推关系

[POJ1958]Strange Towers of Hanoi

Prob.2[动态规划+递推+划归思想的应用]POJ 1958 Strange Towers Of Hanoi Upd:2020.3.1

POJ 1958 Strange Towers of Hanoi 解题报告

Strange Towers of Hanoi (POJ1958)

奇怪的汉诺塔