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