問題連結: http://codeforces.com/contest/894/problem/B
總之就是給定矩陣大小 n * m (n列, m行)
和 k (1 或 -1)
每一列和每一行的乘積都必須要是 k
請問矩陣可以有幾種填法
====================================
我一開始的想法是
先從第一列填到倒數第二列, 每一列都確保乘積是k,
所以如果 k = 1, 就確保有偶數個 -1, 那就是 C(m, 0) + C(m, 2)...
每一列的組合基本上都是這樣, 所以一直給他乘, 算出前 n - 1 列的組合:
(C(m, 0) + C(m, 2) + ... ) ^ (n - 1)
然後因為剩下最後一列, 已經只有一個選擇了, 就乘1
(決定前 n - 1 列等於決定第n列, 因為每一行乘積都要是k)
但這樣的算法在這題完全沒用, 因為 n 跟 m 的範圍極大 ( <= 10^18 )
然後答案要 mod 10^9 + 7
但是組合數量要用到除法, 不可以用餘數運算,
所以應該是用動態規劃之類的, 但是想不太到QQ
(C版首發, 其實不知道能不能問這類問題, 有違反版規請鞭QQ)