T01958 Strange Towers of Hanoi
http://cs101.openjudge.cn/practice/01958/
cpp
#include <iostream>
#include <cmath>
using namespace std;
int dp(int n)
{
if (n == 1)
return 1;
int maxMov = 1e9;
for (int k = 1; k < n; k++)
maxMov = min(maxMov, 2 * dp(n - k) + int(pow(2, k)) - 1);
return maxMov;
}
int main()
{
for (int i = 1; i <= 12; i++)
cout << dp(i) << '\n';
return 0;
}