題意:乙個只含字母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 usingview codenamespace
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;
}
洛谷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的初始...