题目地址:http://contest-hunter.org:83/contest/0x00「基本算法」例题/POJ1958 Strange Towers of Hanoi
这是一个有四座塔的汉诺塔(可百度)问题,在汉诺塔问题中,最后你必须留出一座塔把盘子移到最终柱子上。f[]表示在四座塔情况下的移动步数,d[]表示在三座塔下的移动步数,
因此f[n]=min 1<=i<n (2*f[i]+d[n-i])
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<vector>
using namespace std;
int d[15];
int f[15];
void inin()
{
d[1]=1;
for(int i=2;i<=12;i++)
d[i]=2*d[i-1]+1;
}
int main()
{
inin();
f[1]=1;
printf("%d\n",f[1]);
for(int i=2;i<=12;i++)
{
f[i]=4*d[i-1];
for(int j=1;j<i;j++)
{
f[i]=min(f[i],2*f[j]+d[i-j]);
}
printf("%d\n",f[i]);
}
return 0;
}