五塔

#include <bits/stdc++.h>

using namespace std;

int d[15], f[15], g[15];

int main()

{

    for(int i = 1; i <= 12; i ++ ) d[i] = 2 * d[i - 1] + 1;     //三塔结果

    memset(f, 0x3f, sizeof f);

    memset(g, 0x3f, sizeof g);

    f[0] = 0;

    g[0] = 0;

    for(int i = 1; i <= 12; i ++ )

        for(int j = 0; j <= i; j ++ )

            f[i] = min(f[i], 2 * f[j] + d[i - j]);      //四塔结果

    for(int i = 1; i <= 12; i ++ )

    {

        for(int j = 0; j <= i; j ++ )               //枚举第一部分

            for(int k = 0; k <= 12 - j; k ++ )      //枚举第二部分

            {

                g[i] = min(g[i], 2 * g[j] + 2 * f[k] + d[i - j - k]);

            }

        cout << g[i] << endl;

    }

    return 0;

}

/*

1

3

5

7

11

15

19

23

27

31

39

47

*/

⬅️ 全排列 🏠 00-刷题理模型 ➡️ 奇怪的汉诺塔