POJ 3734 Blocks 矩陣乘法

2021-06-01 02:25:12 字數 1395 閱讀 8838

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

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

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

一,紅為偶數,綠為偶數

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

三,紅為偶數,綠為奇數

四,紅為奇數,綠為奇數

那麼我們構造乙個矩陣

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 那...