题目:对一个“01”串进行一次μ变换被定义为:将其中的"0"变成"10",“1"变成"01”,初始串为"1",求经过N(N <= 1000)次μ变换后的串中有多少对"00"?(由图可知,“1”经过第一次变换成为“01”,第二次变换成为“1001”,经过第三次变换成为“01101001”)![在这里插入图片描述](https://img-blog.csdnimg.cn/20190609085004942.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoX2ltcHJvdmU=,size_16,color_FFFFFF,t_70)
思路:
设“10”为A,设“01”为B,fA[i]为A经过i次变化后产生的“00”数量,fB[i]为B经过i次变化后产生的“00”数量。
fA[i] = fB[i-1] + fA[i-1]
fB[i] = fA[i-1] + fB[i-1] + i%2
题解
def fun(n):
fA = dict()
fB = dict()
fA[0] = 0
fB[0] = 0
for i in range(1, n):
fB[i] = fA[i-1] + fB[i-1] + i%2
fA[i] = fA[i-1] + fB[i-1]
return fB[n-1]
print(fun(1000))