# coding = utf-8 def mul(m1, m2):     h1, w1 = len(m1), len(m1[0])     h2, w2 = len(m2), len(m2[0])     result = [[0]*w2 for _ in range(h1)]     for i in range(h1):         for j in range(w2):             result[i][j] = sum([m1[i][k]*[v[j] for v in m2][k] for k in range(w1)])     return result def quick(m, n):     result = m     n -= 1     while n:         if n&1:             result = mul(result, m)         m = mul(m, m)         n >>= 1     return result def f(w):     memo = [0] * w     memo[0] = 1     memo[1] = 2     memo[2] = 4     for i in range(3, w):         memo[i] = memo[i-1]+memo[i-2]+memo[i-3]     return memo[-1] param = [[1,1,1], [1,0,0], [0,1,0]] # 初始化 w, h = 10, 4   r = quick(param, w-3) r = mul(r, [[4], [2], [1]])[0][0] print(r)  # 矩阵快速幂方法 # print(f(10))  # 动态规划 total_number = r**h
点赞 评论
牛客网
牛客网在线编程
牛客网题解
牛客企业服务