P1357 花園 矩陣快速冪 DP

2022-05-09 01:24:12 字數 934 閱讀 5657

題意:乙個只含字母c和p的環形串

求長度為n且每m個連續字元不含有超過k個c的方案數 

m <= 5  n <= 1e15

題解:用乙個m位二進位制表示狀態 轉移很好想

但是這個題是用矩陣快速冪加速dp的 因為每一位的轉移都是一樣的

用乙個矩陣表示狀態i能否轉移到狀態j 然後跑一遍

統計答案特別講究 因為是乙個環 從1 ~ n+m

那麼 m+1 ~ n + m之間就是我們所求的 1 ~ m和n+1 ~ n + m是同樣的一段

就相當於把m位二進位制狀態 轉移n次

然後再轉移到自己的就是答案

初試模板題

#include using

namespace

std;

typedef

long

long

ll;const ll mod = 1e9 + 7

;ll n, m, k, len;

struct

node re, x;

bool check(int

x)

if(cnt > k) return

false

;

return

true;}

node mul(node a, node b)

node pow_mod(node x, ll y)

return

res;

}int

main()

re =pow_mod(x, n);

ll ans = 0

;

for(int i = 0; i < len; i++)

}printf(

"%lld\n

", ans);

return0;

}

view code

洛谷P1357 花園(狀態壓縮 矩陣快速冪)

小l有一座環形花園,沿花園的順時針方向,他把各個花圃編號為1 n 2 n 10 15 他的環形花園每天都會換乙個新花樣,但他的花園都不外乎乙個規則,任意相鄰m 2 m 5,m n 個花圃中有不超過k 1 k例如,n 10,m 5,k 3。則 ccpcppppcc 是一種不符合規則的花圃 ccpppp...

狀壓dp 矩陣 洛谷 P1357 花園

簡單來說,這一題就是乙個狀壓dp用矩陣優化 但是這個矩陣也是最最最基礎的矩陣了 floyd矩陣 dp的話,和第乙個題解hi一樣的 f i s 表示第i位時的方案,s為i i m 1的狀態 然後轉移的時候我們列舉i列舉2個s if v j k f i j f i j f i 1 k mo 這裡的v j...

洛谷P1357 花園

給定乙個環形的01序列,保證任意相鄰的m個值中有不超過k個1,求滿足要求的方案數對1e9 7取模的值 狀壓dp 矩陣快速冪 由於m的範圍很小,所以我們考慮狀壓dp儲存狀態,而由於n很大,所以我們考慮矩陣快速冪優化轉移 我們定義 f i,j 表示前i個數最後m個的狀態為j時的方案數,顯然這個dp的初始...