矩阵快速幂优化dp

avatar
作者
猴君
阅读量:0

之前一直想找一个矩阵快速幂的专题,但是都没有题目来总结,今天就来水一下


在这里插入图片描述

这个题目的转移方程我们可以很快想出来,但是我们如何作为我们矩阵快速幂的敲门砖呢?

在这里插入图片描述

有一个问题要注意的是我们由于这题不是取模的,可能会溢出,我们要开 long long 才行

class Ma { public:     int a[2][2];     Ma() {         memset(a, 0, sizeof a);     }     friend Ma operator*(Ma b, Ma c) {         Ma d;         for (int i = 0; i < 2; i++) {             for (int j = 0; j < 2; j++) {                 for (int k = 0; k < 2; k++) {                     d.a[i][j] += b.a[i][k] * c.a[k][j];                 }             }         }return d;     } };  // 1 1 // 1 0      class Solution { public:     int climbStairs(int n) {         // f(1) = 1 f(2) = 2         if (n == 1) return 1; if (n == 2) return 2;         Ma b; b.a[0][0] = 2; b.a[1][0] = 1;         n -= 2; Ma c;         c.a[0][0] = c.a[1][0] = c.a[0][1] = 1;         while (n) {             if (n & 1) b = b* c;             c = c * c;             n >>= 1;         }         return b.a[0][0];     } }; 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!