📜  使用4种颜色为3 * N板着色的方法(1)

📅  最后修改于: 2023-12-03 15:06:52.040000             🧑  作者: Mango

使用4种颜色为3 * N板着色的方法

本篇介绍如何使用四种颜色为 $3 \times N$ 的板着色。本文将给出C++代码实现。

思路分析

使用四种颜色为 $3 \times N$ 的板着色,大致思路是通过找规律,将 $N$ 分别为奇数和偶数的情况列出来。其中,$N$ 为偶数时有两种着色方法,$N$ 为奇数时有四种着色方法。具体实现时,我们需要用到递推算法。

偶数情况

如果 $N$ 是偶数,我们可以分解 $3 \times N$ 的板为 $3 \times (N-2)$ 和 $3 \times 2$ 两块,然后考虑对它们的着色方案。

对于 $3 \times (N-2)$ 的板,着色方案可以递推得到,见下面的代码片段:


int even(int n)
{
    if (n == 2) return 10;
    return 4 * even(n-2) - even(n-4);
}

对于 $3 \times 2$ 的板,着色方案一共有 $4$ 种。因此,对于 $3 \times N$ 的板,着色方案数为 $even(N) \times 4$。

奇数情况

如果 $N$ 是奇数,我们可以分解 $3 \times N$ 的板为 $3 \times (N-1)$ 和 $3 \times 1$ 两块,然后考虑对它们的着色方案。同样,对于 $3 \times (N-1)$ 的板,着色方案可以递推得到,见下面的代码片段:


int odd(int n)
{
    if (n == 1) return 4;
    if (n == 3) return 40;
    return 4 * odd(n-2) - odd(n-4);
}

对于 $3 \times 1$ 的板,着色方案一共有 $4$ 种。因此,对于 $3 \times N$ 的板,着色方案数为 $odd(N) \times 4$。

代码实现

下面是 C++ 代码,可以直接复制到您的编辑器中。


#include<bits/stdc++.h>

using namespace std;

int even(int n)
{
    if (n == 2) return 10;
    return 4 * even(n-2) - even(n-4);
}

int odd(int n)
{
    if (n == 1) return 4;
    if (n == 3) return 40;
    return 4 * odd(n-2) - odd(n-4);
}

int main()
{
    int n;
    cin >> n;
    if (n % 2 == 0) cout << even(n) * 4 << endl;
    else cout << odd(n) * 4 << endl;
    return 0;
}

总结

本文详细介绍了如何使用四种颜色为 $3 \times N$ 的板着色。同时,我们通过分析题目,深入剖析递推方法,让我们加强了递推算法的理解。希望大家在学习递推算法的同时,也能够在实践中有所收获。