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 ...