一个数学建模问题,问dl们!(Python)

今天有同学问了一个有趣的问题:
12个座位不允许三人连坐(可以允许一人或二人连坐),那么最多可以坐多少人?
其实不难解决,应该是八人,但如果把这个问题推广到n个座位和不允许m人连坐,可能就比较麻烦了(数学dl可以帮忙求一下)
我突发奇想想检验一下最近的Python学习成果,于是就编了几行代码,最后求出来第一问是8没错
不久后加以推广

import re
n=int(input('请输入n:'))
m=int(input('请输入m:'))
M=''
for x in range(m):
    M+='1'
all_number=[]
max=0
for i in reversed(range(2**n, 2**(n+1))): 
    b=str(bin(i))
    c=''
    for j in range(3,3+n):
        c+= b[j]
        result = re.findall(M, c)
    if result == []:
        result2= re.findall('1', c)
        all_number.append(len(result2))
        for k in all_number:
            if k > max:
                max = k
                print('最大数为{}'.format(max))

采用倒序求数,直接得到答案,其实Python程序还在运行,但已经求出最大值了
但数据过大就不行,太多了,跑不动~
dlm有什么较好的代码吗

作业要自己做