HDU5015 233 Matrix 矩陣高速冪

2021-09-06 21:03:23 字數 1037 閱讀 8448

hdu5015 233 matrix(矩陣高速冪)

題目鏈結

題目大意:給出n

∗m矩陣,給出第一行a01, a02, a03 ...a0m (各自是233, 2333, 23333...), 再給定第一列a10, a10, a10, a10,...an0.矩陣中的每乙個元素等於左邊的加上上面的,求出anm.

解題思路:

先要依據矩陣元素的特徵得出相乘的矩陣t, 然後就是求這個矩陣t的m次冪(這裡就能夠用矩陣高速冪),最後再和給定的第一列所形成的矩陣相乘,就能得到anm。

求矩陣t請參考

**:

#include

#include

typedef

long

long ll;

const

int n = 15;

const ll mod = 10000007;

ll a[n][n];

int b[n];

int n;

ll m;

struct rec

void init ()

rec operator * (const rec &a)

rec operator *= (const rec &a)

}num;

void init ()

a[n + 1][n + 1] = 1ll;

for (int i = 1; i < n + 1; i++)

for (int j = 1; j <= i; j++)

a[i][j] = 1ll;

b[0] = 23;

}rec f(ll m)

int main () */

ll ans = 0;

for (int i = 0; i <= n + 1; i++)

ans = (ans + (num.v[n][i] * b[i]) % mod) % mod;

printf ("%lld\n", ans);

}return

0;}

HDU 5015 233 Matrix 矩陣遞推

題意 給出乙個矩陣,第一行從左到右分別是233,2333,23333,2333333。給出第一列的元素。其他的元素是它上面和左面的元素的和。求右下角元素的值。思路 在比賽的時候,總是想從右下角的元素遞推回去,找到公式,直接計算。發現沒法高效的求和。這道題正確的解法是利用矩陣從第二列開始遞推,每次得到...

HDU5015 233 Matrix 矩陣快速冪

題目鏈結 題意 給定乙個矩陣的第0列的第1到n個數,第一行第1個數開始每個數分別為233,2333.求第n行的第m個數。思路 將第一行的數全部右移一位,用前一列遞推出下一列,構造矩陣,類似如下 1 0 0 0 0 0 0 1 10 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 ...

hdu5015 233 Matrix(矩陣快速冪)

解題思路 根據題目我們發現n的值最大只有10,而m的值最大為10 9,因此可以考慮使用矩陣冪運算,以列為單位 我們根據推理可以發現由前一列乘以某個矩陣之後可以得到後一列,矩陣如下 10 0 0 0 0 1 10 1 0 0 0 1 10 1 1 0 0 1 10 1 1 1 1 1 0 0 0 0 ...