CHNTOWER - Tháp Hà Nội
Tác giả: flashmt
Ngôn ngữ: C++
#include<iostream>
#include<algorithm>
#define fr(a,b,c) for (a=b;a<=c;a++)
using namespace std;
int main()
{
int m,n,i,j,k;
unsigned long long f[65][65];
fr(i,1,64) f[1][i]=1;
fr(i,2,64) f[i][3]=f[i-1][3]*2+1;
fr(i,2,64)
fr(j,4,64)
if (i<=j-1) f[i][j]=2*i-1;
else
{
f[i][j]=f[i][j-1];
fr(k,1,i-1) f[i][j]=min(f[i][j],f[i-k][j-1]+f[k][j]*2);
}
while (cin >> n)
{
cin >> m;
cout << f[n][m] << endl;
}
return 0;
}