求4条柱子的汉诺塔问题所需要的移动次数.
题目中已经给出了算法,实现就可以了.
代码里把k值打表了.
#include <cstdio>
#include <cmath>
using namespace std;
int ans = 0;
const int Ok[13] = {0, 0, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4};
int memo[13];
int tower_3(int n){
return (1 << n) - 1;
}
int tower_4(int n){
if(n <= 0)return 0;
else if(memo[n])return memo[n];
else if(n == 1)return memo[n] = 1;
else return memo[n] = tower_4(n - Ok[n]) * 2 + tower_3(Ok[n]);
}
int main(int argc, char const *argv[]){
for(int i = 12; i >= 1; --i){
tower_4(i);
}
for(int i = 1; i <= 12; ++i){
printf("%d\n", memo[i]);
}
return 0;
}