POJ 3734 Blocks 矩陣乘法

2021-08-26 07:35:15 字數 1198 閱讀 6618

依舊是神奇的矩陣乘法,構思很巧妙,雖說看著很簡單,但是確實沒練過矩陣題,所以就沒這個意識去想到狀態轉移矩陣了。

依舊是參考的別人的思路,也堅定了我要學好矩陣的決心。

有四種顏色,其中紅色和綠色必須是偶數,那麼我們可以分四種狀態,

一,紅為偶數,綠為偶數

二,紅為奇數,綠為偶數,

三,紅為偶數,綠為奇數

四,紅為奇數,綠為奇數

那麼我們構造乙個矩陣

2 1 1 0

1 2 0 1

1 0 2 1

0 1 1 2

每一行分別對應一種狀態

以第一行為例子,從n-1個塊轉成n個塊時

1,1 由於第一種狀態可以由(n-1)塊磚為第一種狀態時加藍或黃轉化,所以有2種情況

1,2 由於第一種狀態可以由(n-1)塊磚第二種狀態時加紅轉化,所以只有1種

1,3 由於第一種狀態可以有(n-1)塊磚第三種狀態時加綠轉化,所以這裡也是1種

1,4 由於第一種狀態無法有(n-1)塊磚第四種狀態時轉化而來,所以這裡是0

然後就是矩陣連乘,快速冪了

/* id: sdj22251 prog: subset lang: c++ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define loca #define maxn 500005 #define inf 100000000 #define eps 1e-7 #define l(x) x<<1 #define r(x) x<<1|1 using namespace std; int n = 4, m; int tt[4][4]=; struct wwj need, pea; void init() pea.c = n; pea.r = n; for(int i = 1; i <= n; i++) } wwj multi(wwj x, wwj y) } } return t; } int main() pea = multi(pea, pea); m = m >> 1; } printf("%d\n", need.mat[1][1] % 10007); } return 0; }

POJ 3734 Blocks 矩陣乘法

依舊是神奇的矩陣乘法,構思很巧妙,雖說看著很簡單,但是確實沒練過矩陣題,所以就沒這個意識去想到狀態轉移矩陣了。依舊是參考的別人的思路,也堅定了我要學好矩陣的決心。有四種顏色,其中紅色和綠色必須是偶數,那麼我們可以分四種狀態,一,紅為偶數,綠為偶數 二,紅為奇數,綠為偶數,三,紅為偶數,綠為奇數 四,...

poj 3734 Blocks (生成函式)

題目大意 給n個格仔染色,有紅藍綠黃四種顏色,其中紅綠格仔的顏色都必須是偶數個。求滿足條件的染色方案。排列問題可以用指數型生成函式。答案就是e2 x e x e x2 2 中xn 的係數乘n 化簡一下e4 x 2e 2x4 因為e kx中x n 的係數為kn n 所以an s 4n 2 2 n4 n...

POJ 3734 Blocks 指數型生成函式

題意 有紅球,藍球,綠球,黃球,其中紅球和綠球都只能選擇偶數個,求選擇 n 個球擺成一排有多少種方案數.我們構造關於這些球的指數型生成函式 f x sum frac x i 其中 a 表示選擇 i 個球的不同排列數.紅與綠 1 frac frac frac 黃與藍 1 frac frac e x 那...