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