矩陣乘法

xsy2041
bzoj4002
題意:

(b+d2)n  mod  7528443412579576937

分析:
構造數列an=(b+d2)n+(bd2)n
xn+yn=(xn1+yn1)(x+y)(xn2+yn2)xy
an=an1ban2b2d4
然後就可以矩乘得到an
由於an 爲正整數且|(bd2)n|<1
因此 (bd2)n 只在n爲偶數且d!=b 時爲正。此時答案需要-1。

bzoj1875
題意:
給定一張無向圖,每條路的長度都是1,沒有自環,可能有重邊,給定起點與終點,求從起點走t步到達終點的方案數。
每一步走的時候要求不能走上一條剛剛走的路。

分析:
這道題的思路,主要是構建矩陣的思路很巧妙。我們普通的用矩陣乘法轉移是用點來轉移,但是這樣不能去掉在一個地方逗留的情況。
一個很神奇的做法就是用邊來構圖(對於一條邊i,除去一條邊j滿足i==(j^1)的情況,與其他的邊都相連)轉移t-1次,然後同用與起點相連的邊構造的一個矩陣(相當於係數矩陣)相乘。最後統計答案,只需將終點相連的邊的答案加上即可。

bzoj2165
題意:
給定一張圖,求從1開始到達m的權值至少需要遍歷多少條邊n100
分析:
從每個點出發每走一步的轉移矩陣都是一樣的,於是可以考慮倍增。求答案時從大到小枚舉每個二進制位,更新g,若不存在從1開始長度>=m的路徑,這一位就是1。

bzoj2510
題意:
有M個球,一開始每個球均有一個初始標號,標號範圍爲1~N且爲整數,標號爲i的球有ai個,並保證Σai=M
每次操作等概率取出一個球(即取出每個球的概率均爲1M ),若這個球標號爲kk<N ,則將它重新標號爲k + 1;若這個球標號爲N,則將其重標號爲1。(取出球后並不將其丟棄)
現在你需要求出,經過K次這樣的操作後,每個標號的球的期望個數。

分析:
a[x] 爲編號爲x的期望個數,每進行一次操作,球的期望個數就變成了a[x]a[x]m+a[x1]m 。於是構造矩陣:
這裏寫圖片描述
再弄一波矩陣快速冪。但是時間複雜度是O(n3logM)n=1000 時就爆炸了。
發現這是一個循環矩陣,只要知道第一行就可以知道整個矩陣,於是乎時間複雜度變成了O(n2logM)

bzoj1898
題意:
給出一張無向圖,這個圖中有一些魚,他們不同的時間會出現在固定的位置,呈週期性循環(週期只有2,3,4),一個人要在這個圖上走,他不能和魚同時在一個點上。問從s到t走k步有多少種方案。

分析:因爲週期只有2,3,4所以12就是一個大週期,每12個時間單位內的路徑轉移都是一樣的,於是構造出12個矩陣將它們相乘變爲一個大週期。整個整個週期的就快速冪,剩下的暴力乘。

bzoj1009
題意:
阿申準備報名參加GT考試,准考證號爲N位數X1X2....Xn(0Xi9) ,他不希望准考證號上出現不吉利的數字。 他的不吉利數學A1A2...Am(0Ai9) 有M位,不出現是指X1X2…Xn中沒有恰好一段等於A1A2...AmA1X1 可以爲0阿申想知道不出現不吉利數字的號碼有多少種。N109,M20

分析:
dp[i][j]表示考號弄到前i位時當前考號的後j位於不吉利考號的前j位相同。
dp[i+1][k]+=dp[i][j]num[j][k]
num[j][k] 表示 能匹配到第j位 加一位以後變成 能匹配到第k位 有多少個數符合。
題解1
題解2

bzoj2326
題意:
定義Concatenate(1,N)=1234567……n。比如Concatenate(1,10)=12345678910。給定n和m,求Concatenate(1,n)%m。

分析:
f[i] 爲Concatenate(i)的大小。
f[i]=f[i1]101+(i1)+1    1i101
f[i]=f[i1]102+(i1)+1    1i102
……
構造矩陣
這裏寫圖片描述
注意分段矩陣運算時不能用分配率。

bzoj2476
題意:
令戰場定義爲可以從中間某個點向兩邊單調不增且不是一個長方形的柱子的序列,求周長爲p的柱子有多少個。

分析:
令f[n]爲周長爲2n的戰場數 不考慮【不是長方形】這個條件
如果一個戰場左右都沒有高度爲1的柱子,則方案數等價於將最下方一排砍掉的方案數 即f[n-1]
如果一個戰場左側或右側有一個高度爲1的柱子,則方案數等價於砍掉這個高度爲1的柱子的方案數 即2*f[n-1]
但是如果一個戰場左側和右側都有一個高度爲1的柱子,那麼這個戰場被上面那種情況計算了兩次,要減掉 方案數是f[n-2]
故得到遞推式f[n]=3*f[n-1]-f[n-2] 矩陣乘法搞出來 再減去長方形的方案數 即n-1即可。

bzoj4417     ☆☆☆☆☆
題意:
現有一個n行m列的棋盤,一隻馬欲從棋盤的左上角跳到右下角。每一步它向右跳奇數列,且跳到本行或相鄰行。跳越期間,馬不能離開棋盤。

分析:
f[i][j] 表示馬跳到(2i1,j) 位置時的方案數。g[i][j] 表示馬跳到(2i,j) 位置時的方案數。於是列出狀態轉移:

f[i][j]=x=1i1g[x][j1]+x=1i1g[x][j]+x=1i1g[x][j+1]

g[i][j]=x=1if[x][j1]+x=1if[x][j]+x=1if[x][j+1]

將f[i][j]和g[i][j]的定義均改爲原來定義的前綴和:
f[i][j]=f[i1][j]+g[i1][j]+g[i1][j1]+g[i1][j+1]
g[i][j]=g[i1][j]+f[i][j]+f[i][j1]+f[i][j+1]

bzoj2126
題意:
在一個圓上均勻分佈pq 個點A1A2A3ApqAiAj 的距離爲min(abs(ij)pqabs(ij) ) ,在上面選任意個點(可以選0個),如果選擇的點中存在兩個點距離爲p或q,就會發生排斥反應,求不發生排斥反應的方案總數。

分析:
將這pq 個點看成是p行q列的矩陣,那麼題目就轉換爲相鄰的格子不能同時取(包括第一行和最後一行,第一列和最後一列)。因爲p10 枚舉一波發現一列一共只有123種可行的填法,於是構造一個123*123的矩陣快速冪轉移一波就好了。

bzoj3610
bzoj1444
bzoj4180
bzoj3329
bzoj4128

循環矩陣

這裏寫圖片描述
對於兩個循環矩陣 A 與 B 來說,A + B 也是循環矩陣。AB 也是循環矩陣,並且 AB=BA。這時只要確定第一行就確定了整個矩陣

發佈了193 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章