狀壓dp 矩陣 洛谷 P1357 花園

2021-08-02 18:29:37 字數 1100 閱讀 4931

簡單來說,這一題就是乙個狀壓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][k]表示狀態j是否可以轉移到狀態k;

這個陣列是一開始直接暴力預處理的;

那麼我的70分的**(無滾存)

#include

#define ll long long

using

namespace

std;

bool v[64][64],ok[64];

int bb[10],b[10];

ll f[100010][64];

ll n,m,k,w,ans,mo=1e9+7;

void check()

void dfs(int x)

b[x]=1;dfs(x+1);

b[x]=0;dfs(x+1);

}void work(int x)

int main()

然後矩陣快速冪直接套上去就好了;

就是把那個v直接自乘n次,然後算答案;

#include

#define ll long long

using

namespace

std;

struct jv

}v,a;

bool ok[64];

int bb[10],b[10];

ll n,m,k,w,ans,mo=1e9+7;

void check()

void dfs(int x)

b[x]=1;dfs(x+1);

b[x]=0;dfs(x+1);

}jv cheng(jv a,jv b)

jv ksm(jv x,ll y)

int main()

洛谷P1357 花園

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

花園 洛谷 1357 狀壓DP 矩陣虧快速冪

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

P1357 花園 矩陣快速冪 DP

題意 乙個只含字母c和p的環形串 求長度為n且每m個連續字元不含有超過k個c的方案數 m 5 n 1e15 題解 用乙個m位二進位制表示狀態 轉移很好想 但是這個題是用矩陣快速冪加速dp的 因為每一位的轉移都是一樣的 用乙個矩陣表示狀態i能否轉移到狀態j 然後跑一遍 統計答案特別講究 因為是乙個環 ...