题目链接:黑暗的字符串
- 分析:不管前面是什么序列,你在第n位至少有两种填法,第n-1,n-2的字母,当第n-1,n-2字母相同时,前面就漏掉了一种填法,即加上一个f(n-2)即可
- 确定dp数组以及下标的含义:dp[i]表示字符串的长度为i的时候的黑暗的字符串的数目。
- 状态转移方程:
dp[i]=dp[i-1]+2*dp[i-2];
- 初始化:
vector<long long> dp(n+1,0); dp[1]=3;dp[2]=9;
所有的状态如果都不符合题目的要求的话,其结果是为0的。 - 确定遍历顺序:dp[i]是由dp[i-1]和dp[i-2]推导而来,因此,遍历i的时候应该从左往右遍历。
- 优化:这道题其实就是斐波那契数列的变形,因此我们可以采用矩阵快速幂进行优化程序,使得其时间复杂度降为O(logN)。