0114 方块计数一
* * * *
拉格朗日计划
* * * *
方块计数一

用黑色方块和最短长度为3的红色方块摆成一行,要求任意两个红色方块(长度可以不同)之间至少有一个黑色方块。

若总长度为7,则恰好有$17$种不同的摆法:



若摆成长度为50的一行,则有多少种不同的摆法?。

注:尽管在上例中并未体现,不过使用不同的长度的红色方块是允许的。例如,要摆成长度为8的一行,可以用红3+黑1+红4。

本题难度:



解答

令$a_n$为长度为n的摆法中以红色块结尾的摆法总数,$b_n$为长度为n的摆法中以黑色块结尾的摆法总数,考虑在最后添加一块的情形:

添加黑色块总是组合规则的,因此 $$b_{n+1}=a_{n}+b_n.$$ 由于红色块的最小长度是3,因此它只能添加在红色块后(否则最后两格为黑1+红1不合规则),此外,长度为n+1且以红色块结尾的摆法还可以通过取长度为n-2且以黑色块结尾的摆法,并在其后连续添加3个红色块得到,因此 $$a_{n+1}=a_{n}+b_{n-2}.$$ 易知初值为 $$a_1=a_2=0, a_3=1,\quad b_1=b_2=b_3=1.$$ 递推即得$a_{50}+b_{50}=16475640049$。

a=[0,0,0,1]
b=[0,1,1,1]

for i in range(4,51):
    b.append(a[i-1]+b[i-1])
    a.append(a[i-1]+b[i-3])

print a[50]+b[50]