涂色方案分成两类
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; } };