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

Download