做网站前台要学哪些,佛山公司推广优化,网络口碑营销案例,中国菲律宾大使馆官网大类只有2种情况 (1)无A :dp[n]种 . (2)有1个A: d[j-1]*dP[n-j]#xff0c;注意j1,2,3,…,n。 此时无A的情况#xff0c;只用考虑P和L的的排列。初始化dP[0]1, dP[1]2,dP[2]4#xff0c;n2时候显而易见#xff0c;因为L的情况不用管#xff01;#xff01;#xff0…大类只有2种情况 (1)无A :dp[n]种 . (2)有1个A: d[j-1]*dP[n-j]注意j1,2,3,…,n。 此时无A的情况只用考虑P和L的的排列。初始化dP[0]1, dP[1]2,dP[2]4n2时候显而易见因为L的情况不用管
现在难点是如何排除3个L的情况!!!
以n4为例子 :那么对于第1个元素可以是P可以是L如果是P就好办了直接dp[3]如果是L呢
P[]: dp[3]LP[] :第1个是L第2个可以是P那么也好办直接dp[2],因为后面就2个元素LLP[] 第2个如果是L呢也好办第3个一定是P直接dp[1]。
好了已经发现规律了dp[n]dp[n-1]dp[n-2]dp[n-3]; 最后1和2加起来就是答案了。
class Solution {public int checkRecord(int n) {if(n1)return 3;long []dp new long[n1];dp[0] 1;dp[1] 2;dp[2] 4;long MOD 1000000007;for(int i3;in;i){dp[i] ((dp[i-1] dp[i-2])%MOD dp[i-3])%MOD;} long res 0;//有1个Afor(int i1;in;i){long tmp (dp[i-1]*dp[n-i])%MOD;res (restmp)%MOD;}res (resdp[n])%MOD;return (int)res;}
}