學習筆記 矩陣十題

2022-08-12 15:00:22 字數 3317 閱讀 3963

快速冪模板

#define n 150

struct

martix

inline

void

build()

inline

void

clear()

} aa;

martix

operator *(const martix &a, const martix &b)

}returnc;}

martix

operator ^( martix a, ll k)

return

tmp;

}

模板需要注意的說開200x200以上可能爆棧,這時候必須把封裝去了

技巧1:對矩陣ak次冪求和可以構造矩陣

a e0 e

新矩陣的k+1次冪的右上即為所求

技巧2:齊次遞推數列可以構造矩陣快速求出

將所有項看作列向量就可以很方便地構造,若要求多項和,只需在構造的矩陣中加一列即可

技巧3:從u到v恰好走k步

轉移矩陣k次冪即可

vijos 1049 

//

#define local

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define x_mem(x,y,z) (x_mem[x][y][z] ? x_mem[x][y][z] :x_mem[x][y][z]=mem(x,y,z))

//x_init=0 mem_macro

#define inf 0x3f3f3f3f

#define mod 1000000007

#define for(i,j,k) for(int i=j;i#define ford(i,j,k) for(int i=j;i>k;i-=1)

#define ull unsigned long long

#define ll long long

#define sz(x) int(x.size())

#define pb push_back

#define n 150

//int mod;

struct

martix

inline

void

build()

inline

void

clear()

} aa;

martix

operator *(const martix &a, const martix &b)

}returnc;}

martix

operator ^( martix a, ll k)

return

tmp;

}int

main()

ans=ans^(k/m);

for(i,

0,k%m)

int anss[110

];for(i,

0,n)

for(j,

0,n)

if(ans.mar[i][j]) anss[i]=j;

/*for(i,0,n)

ac**

vijos 1194

//

#define local

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define x_mem(x,y,z) (x_mem[x][y][z] ? x_mem[x][y][z] :x_mem[x][y][z]=mem(x,y,z))

//x_init=0 mem_macro

#define inf 0x3f3f3f3f

#define mod 1000000007

#define for(i,j,k) for(int i=j;i#define ford(i,j,k) for(int i=j;i>k;i-=1)

#define ull unsigned long long

#define ll long long

#define sz(x) int(x.size())

#define pb push_back

#define n 150

//int mod;

intp;

struct

martix

inline

void

build()

inline

void

clear()

} aa;

martix

operator *(const martix &a, const martix &b)

}returnc;}

martix

operator ^( martix a, ll k)

return

tmp;

}int

main()

aa=aa^n;/*

for(i,0,l)

ac**

神題,要求用1x2全覆蓋nxm

由於n,m極度的不均勻(m<5,n<1e9),而1x2最多影響兩行,所以考慮乙個狀態轉移矩陣

狀態為單獨一行被覆蓋的格仔的二進位制表示,預設前面的行已經被全覆蓋。則步進的狀態轉移就可以看作在全覆蓋當前行且最大影響範圍不超過下一行的前提下任意的擺放結果(只看下一行的覆蓋情況)

轉移的條件是(i|j)==1<

矩陣十題1(nyoj298)

繼續深造矩陣類題目,看到大佬們都有矩陣十題部落格,我也學習了,只有題目,沒有解析系列1 通過矩陣變換將所有操作都存到矩陣中,最後輸出答案即可。矩陣的構造方法 直接上 include include include include include include include include a 3...

矩陣十題 六 poj3070 Fibonacci

id 3070 題目大意 給定n和10000,求第n個fibonacci數mod 10000 的值,n不超過2 31。結果保留四位數字。非常easy的題,和之前做過的相比簡單非常多了。構造最簡單的斐波那契數列矩陣。include include includeusing namespace std ...

矩陣十題 六 poj3070 Fibonacci

id 3070 題目大意 給定n和10000,求第n個fibonacci數mod 10000 的值,n不超過2 31。結果保留四位數字。非常easy的題,和之前做過的相比簡單非常多了。構造最簡單的斐波那契數列矩陣。include include includeusing namespace std ...