1411. 给 N x 3 网格图涂色的方案数

涂色方案分成两类

6个xyx型和6个xyz型

对于每个xyx型的涂色方案,都有4个对应的涂色可以与其相邻,这4个中有2个xyx型的和2个xyz型的

对于每个xyz型的涂色方案,都有5个对应的涂色可以与其相邻,这5个中有2个xyx型的和3个xyz型的

设dp[i][0]表示最后一行为xyx的涂色方案数

因为每个xyx都有2个xyx与其对应,每个xyz都有2个xyx与其对应

所以dp[i][0] = 2 * dp[i - 1][0] + 2 * dp[i - 1][1]

同理dp[i][1] = 2 * dp[i - 1][0] + 3 * dp[i  -1][1]

class Solution {
public:
    int dp[50010][2];
    int MOD = 1e9 + 7;
    int numOfWays(int n) {
        dp[1][0] = 6;
        dp[1][1] = 6;
        for(int i = 2; i <= n; i++)
        {
            dp[i][0] = (2 * (long long)dp[i - 1][0] + 2 * (long long)dp[i - 1][1]) % MOD;
            dp[i][1] = (2 * (long long)dp[i - 1][0] + 3 * (long long)dp[i - 1][1]) % MOD;
        }
        return (dp[n][0] + dp[n][1]) % MOD; 
    }
};

 

posted @ 2021-10-19 09:20  WTSRUVF  阅读(37)  评论(0编辑  收藏  举报