根據題意可以構造出矩陣:a(假設d=1)
1 1 0 0 ... 1
1 1 1 0 ... 0
0 1 1 1 ... 0
...
然後矩陣快速冪就可以解了,但是這個題的規模是500的,如果直接三重for迴圈會超時,觀察矩陣可以發現,這個矩陣是有特點的,所以可以只儲存一行,然後就是o(n^2*logk)的複雜度,就可以a了。
下面是**:
#include#include#include#includeusing namespace std;
const int maxn=550;
int n,m,d,k;
int f[maxn];
struct matrix
matrix operator*(const matrix & a)const
return res;
}int main()
{ while(scanf("%d%d%d%d",&n,&m,&d,&k)!=eof)
{for(int i=0;i
矩陣快速冪(細胞自動機,LA 3704)
樸素的矩陣乘法o n 3 會超時。但是因為這個矩陣是迴圈矩陣,根據迴圈矩陣的性質 迴圈矩陣 迴圈矩陣 迴圈矩陣 所以只用算出第一行,然後根據迴圈矩陣的性質就可以遞推出下一行,進而得到整個迴圈矩陣。時間複雜度降為o n 2 如果遇到一些模板題卻超時就要好好想一想這道題跟模板題到底 不一樣了,進而才能發...
矩陣快速冪優化遞推式
文章原位址 第一行第一列元素為第乙個矩陣的第一行的每個元素和第二個矩陣的第一列的每個元素乘積的和 以此類推 第i行第j列的元素就是第乙個矩陣的第i行的每個元素與第二個矩陣第j列的每個元素的乘積的和。單位矩陣 n n的矩陣 mat i i 1 任何乙個矩陣乘以單位矩陣就是它本身 n 單位矩陣 n,可以...
演算法之矩陣快速冪優化
3.斐波那契f n f n 1 f n 3 4.應用 這種解法的關鍵在於矩陣的賦值 1,1 1,0 這裡的賦值是比較容易的 include using namespace std typedef vectorlong long vec typedef vector long long veca co...