用表示长度为n,有过k次迟到,且以w结尾的满足要求的字符串总数。
其中,,w是AA、AO、OA、OO、AL、LA、LO、OL这八种字符串之一。
考虑在长度为n-1的字符串后添加一个字母的情形并按此定义递推,很容易就得到结果。
s=["AA","AO","OA","OO","AL","LA","LO","OL"]
f=[[dict.fromkeys(s,1 if n==2 else 0) for k in [0,1]] for n in range(31)]
f[2][0]["AL"]=f[2][0]["LA"]=f[2][0]["LO"]=f[2][0]["OL"]=f[2][1]["AA"]=f[2][1]["AO"]=f[2][1]["OA"]=f[2][1]["OO"]=0
for n in range(3,31):
f[n][0]["AA"]=f[n-1][0]["OA"]
f[n][0]["AO"]=f[n-1][0]["AA"]+f[n-1][0]["OA"]
f[n][0]["OA"]=f[n-1][0]["AO"]+f[n-1][0]["OO"]
f[n][0]["OO"]=f[n-1][0]["AO"]+f[n-1][0]["OO"]
f[n][1]["AA"]=f[n-1][1]["OA"]+f[n-1][1]["LA"]
f[n][1]["AO"]=f[n-1][1]["AA"]+f[n-1][1]["OA"]+f[n-1][1]["LA"]
f[n][1]["OA"]=f[n-1][1]["AO"]+f[n-1][1]["OO"]+f[n-1][1]["LO"]
f[n][1]["OO"]=f[n-1][1]["AO"]+f[n-1][1]["OO"]+f[n-1][1]["LO"]
f[n][1]["AL"]=f[n-1][0]["OA"]+f[n-1][0]["AA"]
f[n][1]["LA"]=f[n-1][1]["AL"]+f[n-1][1]["OL"]
f[n][1]["LO"]=f[n-1][1]["AL"]+f[n-1][1]["OL"]
f[n][1]["OL"]=f[n-1][0]["AO"]+f[n-1][0]["OO"]
print sum(v for v in f[30][0].values())+sum(v for v in f[30][1].values())
|