hdu-1207(规律推导)

时间:2023-03-08 23:34:16
hdu-1207(规律推导)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1207

思路:

可以按照类似汉诺塔的推导形式来推导,

首先,有四个柱子,a,b,c,d。

(1)a的x个盘子借b,d转移到c上,要F(x)次;

(2)a的n-x个盘子借b转移到d上(就是普通的汉诺塔)要2^(n-x)-1次;

(3)c的x借a,b转移到d上需要F(x)次。

所以总共要2*F(x)+2^(n-x)-1次,所以将x从1--n-1遍历即可。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int INF = ;
int a[];
int main(void)
{
int mi,n,i,j;
a[]=;a[]=;a[]=;a[]=;
for(i=;i<=;i++)
{
mi=INF;
for(j=;j<i;j++)
mi=mi<(*a[j]+pow(,i-j)-)?mi:(*a[j]+pow(,i-j)-);
a[i]=mi;
}
while(~scanf("%d",&n))
{
printf("%d\n",a[n]);
}
return ;
}