奇怪的汉诺塔 POJ1958

奇怪的汉诺塔 POJ1958

思路

题干在这里:POJ1958
就是求汉诺四塔问题
设d(i)表示三塔步数,f(i)表示四塔步数
显然有f(n)=min(2*f(i)+d(n-i))直接做就好

ac代码

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
int f[13] = { 0 };
int d[] = { 0,1,3,7,15,31,63,127,255,511,1023,2047,4095 };
void findsolve(int n) {
 f[n] = 0x3f3f3f3f;
 for (int i = 1; i < n; i++)
  f[n] = min(f[n], 2 * f[i] + d[n-i]);
}
int main() {
 f[1] = 1;
 for (int i = 2; i <= 12; i++)
  findsolve(i);
 for (int i = 1; i <= 12; i++)
  cout << f[i] << endl;
}
发布了24 篇原创文章 · 获赞 0 · 访问量 362

猜你喜欢

转载自blog.csdn.net/qq_45616764/article/details/104160932