poj-3233
利用矩陣快速冪推出轉移矩陣。注意什麼時候取模,同時用printf一定要注意格式的問題,與型別要匹配。
這次的轉移矩陣是由一些子矩陣構成,不再是一些普通的常數了。×=
\left\ e&e\\ o&a \end \right\}\times \left\ s_\\ a_k \end \right\}= \left\ s_k\\ a_ \end \right\}
×=
#include
#include
#include
#include
using namespace std;
typedef
long
long ll;
struct matrix
;int mod;
matrix mul
(matrix a,matrix b,
int n)
return tmp;
}matrix pow
(matrix a,
int n,
int n)
return res;
}int
main()
for(i =
1; i <= n ; i++
) t.m[i]
[i]=1;
for(i =
1; i <= n ;i++
)for
(j = n+
1; j <=
2*n; j++
)for
(i =
1; i <= n ;i++
)for
(j =
1; j <= n ;j++
) n <<=1;
t =pow(t,k -
1,n)
; t =
mul(t,d,n)
; n >>=1;
for(i =
1; i <= n ;i++
)for
(j =
1; j <= n ;j++
)printf
("%d%c"
,t.m[i]
[j],j==n?
'\n'
:' ');
}}
hdu -5015
告訴你第一行和第一列分別是什麼數,然後告訴你遞推公式,讓你求a[n][m]是多少。
我們發現m特別大,因此考慮快速冪,主要是遞推矩陣不好想,這裡是以列轉移。
n +2
×=
n+2 \left\ 10&\cdots&\cdots&\cdots&\cdots&\cdots&1\\ 10&1&\cdots&\dots&\cdots&\cdots&1\\ 10&1&1&\cdots&\cdots&\cdots&1\\ 10&1&1&1\cdots&\cdots&\cdots&1\\ 0&0&\cdots& &&&1 \end \right\}\times \left\ a_\\ a_\\ \cdots\\ a_\\ 3 \end \right\}= \left\ a_\\ a_\\ \cdots\\ a_\\ 3 \end \right\}
n+2⎩⎪⎪
⎪⎪⎨⎪
⎪⎪⎪⎧
101
0101
00⋯
1110
⋯⋯1
1⋯⋯
…⋯1⋯
⋯⋯⋯
⋯⋯⋯
⋯⋯1
1111
⎭⎪⎪
⎪⎪⎬⎪
⎪⎪⎪⎫
×⎩⎪
⎪⎪⎪⎨
⎪⎪⎪⎪
⎧a0
,m−1
a1,
m−1
⋯an,
m−1
3⎭⎪
⎪⎪⎪⎬
⎪⎪⎪⎪
⎫=⎩
⎪⎪⎪⎪
⎨⎪⎪⎪
⎪⎧a
0,m
a1,m
⋯an
,m3
⎭⎪⎪
⎪⎪⎬⎪
⎪⎪⎪⎫
#include
#include
#include
#include
using namespace std;
typedef
long
long ll;
const
int mod =
10000007
;struct matrix
;int n;
matrix mul
(matrix a,matrix b)
return tmp;
}matrix pow
(matrix a,
int n)
return res;
}int
main()
}for
(int i =
0; i <= n; i++
) b.m[n +1]
[n +1]
=1; b =
pow(b , m)
; a =
mul(b , a)
; cout << a.m[n][0
]<< endl;
}}
poj 3233 矩陣快速冪
十個利用矩陣乘法解決的經典題目的最後一題 1a終於刷完十道題了,基本都是乙個思路 二分優化!a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 用二分變成 a 1 a 2 a 3 a 4 a 4 a 1 a 2 a 3 a 4 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a ...
poj3233(矩陣快速冪)
poj3233 給定n k,m 然後是n n行,我們先可以把式子轉化為遞推的,然後就可以用矩陣來加速計算了。矩陣是加速遞推計算的乙個好工具 我們可以看到,矩陣的每個元素都是乙個矩陣,其實這計算乙個分塊矩陣,我們可以把分塊矩陣展開,它的乘法和普通矩陣的乘法是一樣的。1 include 2 includ...
hdu5015 矩陣快速冪233(好題)
題意 給你乙個 n 1 m 1 的矩陣mat,然後給你mat 0 1 233 mat 0 2 2333,mat 0 3 23333.然後輸入mat 1 0 mat 2 0 mat 3 0 然後給了矩陣中的其他數值是mat i j mat i 1 j mat i j 1 最後讓你輸出mat n m 思...