HDU5950 矩陣快速冪(巧妙的遞推)

2022-06-06 03:33:09 字數 1201 閱讀 9450

題意:f[n] = 2*f[n-2] + f[n-1] + n^4

思路:對於遞推題而言,如果遞推n次很大,則考慮矩陣快速冪的方式推出遞推式,計算出累乘的矩陣

本題遞推式:本題的遞推式子雖然已經給出,但是由於n^4的關係,直接是無法使用這個f[n] = 2*f[n-2] + f[n-1] + n^4遞推完成矩陣的推導的,而是可以先處理一下,如下:

f[n] = 2*f[n-2] + f[n-1] + n^4

f[n+1] = 2*f[n-1] + f[n] + n^4 + 4*n^3 + 6*n^2 + 4*n + 1

f[n+2] = 2*f[n] + f[n+1] + (n+1)^4 + 4*(n+1)^3 + 6*(n+1)^2 + 4*(n+1)+ 1

此時,我們發現從n+1項開始包括n+1項,都是由7個部分組成的多項式,則我們可以利用n+1項和n+2項的多項式進行矩陣快速冪的遞推矩陣的推導,由於矩陣乘法的性質,對於乙個1x7的矩陣a,要求相乘另乙個矩陣b之後,還是乙個1x7的矩陣,則矩陣b的規模必須是7x7,下面是推導, 對於黃色的一行乘綠色一列,得到橙色的乙個數

完成矩陣的遞推之後,就很簡單了,用矩陣的快速冪計算即可,需要注意的是對於n>=3,我們才需要進行矩陣相乘的運算,而初始的時候,我們需要計算出黃色矩陣代表的部分,本題就是將n==2代入,算出初始黃色矩陣為[a, b, 16, 8, 4, 2, 1]

**:

1 #include2 #include3

using

namespace

std;45

const

long

long mod = 2147493647;6

struct

mat;

910 mat operator * (mat a, mat b)

19 ret.m[i][j] =temp;20}

21}

22return

ret;23}

2425 mat pow_mat(int f1, int f2, mat a, int n)

33return

res;34}

3536

intmain()56}

57return0;

58 }

矩陣構造 矩陣快速冪 HDU5950

題目 題意 給出公式f n f n 1 f n 2 2 n 4 給出n f 1 f 2 求f n 分析 快速冪 把公式分解一下,求一下矩陣,矩陣快速冪搞一下就好 題目的難點在於矩陣的構造題解 典型的矩陣快速冪的運用。關鍵是i 4怎麼維護?我們可以當成求第i 1項,那麼i 4就變成了 i 1 4。那麼...

hdu 4965 矩陣快速冪

給定兩個矩陣a,b,分別為n k和k n 求出矩陣c a b,矩陣m c n n 將矩陣m中的所有元素取模6,得到新矩陣m 並計算矩陣m 中所有元素的和 注意到ba 得到 6 6,而ab 得到1000 1000 轉化乘法算式為 m abababab.a ba n n 1 b 直接用矩陣快速冪即可 i...

快速矩陣冪HDU2276

題意 有n盞燈,編號為1到n。0表示不亮,1表示亮,如果 i th的燈的左邊燈是亮的,那麼下一秒鐘,i th燈的狀態要改變,0變成1,1變成0。第1個燈的 左邊是第n個燈 輸入t,輸入開始的狀態 問你在第t秒時,燈的狀態時什麼樣的,輸出來。分析 可推出下一秒的狀態a i a i 1 n n a i ...