链接
http://poj.org/problem?id=1958
大意
求出 个盘,4个塔的最小步数
解题思路
随便写个 。。。
设 表示 个塔, 个盘的最小步数
我们先忽略掉 的情况
在我们做过的汉诺塔原题中,可以得到:
那如果是四座塔,其实就是在3的基础上多移两次,并加上剩下的盘在少一座塔时候的答案,即:
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int f[13],n;
signed main()
{
f[1]=1;
putchar(49);putchar(10);//1的情况直接输出
for(register int n=2;n<=12;n++)
{
f[n]=2+(~-(1<<(~-n)));
for(register int i=2;i<n;i++)
f[n]=min((f[i]<<1)+(~-(1<<(n-i))),f[n]);//动态转移
printf("%d\n",f[n]);
}
}