Skip to content

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;  
}