HDU5863(dp,矩陣加速)

2021-08-04 03:43:01 字數 948 閱讀 9760

題意:用k種字元來組成另個長度為n,但是最大字串匹配為m的方案數。匹配必須相同位置連續。

dp[i][j]表示現在構造了i長度,長度j字尾連續對應相等,那麼dp[i][j] = dp[i-1][j-1]*k,特別地,dp[i][0] = sigma(dp[i-1][j]*(k-1)*k) (0=

但是n很大,不能o(n)轉移。所以要想到用矩陣加速。

用矩陣快速冪加速這個dp可以得到dp[n][0]~dp[n][m],即

令sum=dp[0][0]+dp[0][1]…+dp[0][m]然後加起來就是前面最長不超過m的和,再減去不超過m-1的就是長度為m的

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef pairp;

const int inf=0x3f3f3f3f;

const ll inff=0x3f3f3f3f3f3f3f3f;

const ll mod=1e9+7;

const double pi=acos(-1.0);

const double eps=1e-9;

ll n,k;

struct matrix};

matrix ans;

matrix multi(matrix a,matrix b,ll m)

return ans;

}ll solve(ll m)

{ matrix tmp;

for(int i=0;i

hdu5863 dp 矩陣快速冪

題意 題目大概說用k個不同的字母,有多少種方法構造出兩個長度n最長公共子串長度為m的字串。思路n的規模達到了10億,而且又是方案數,自然就想到構造矩陣用快速冪解決。考慮用dp解決可以這麼表示狀態 狀態的轉移就是,末尾j個相同的可以轉移到0個相同的也能轉移到j 1個相同的 前提是j 而對於這個狀態可以...

DP 矩陣加速

題目 hiho第43周 hiho1162 題意 現有1 2的骨牌,求覆蓋k n的方案數。2 k 7,1 n 100,000,000 方法 dp,用矩陣快速冪加速 dp矩陣加速的基本思想即將一系列狀態看成乙個向量,轉移方程看成乙個矩陣,通過向量乘矩陣得出下一系列狀態,即當 由於k較小,可以用狀壓思想構...

藍橋杯 壘骰子 矩陣加速dp

壘骰子賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧秘 有些數字的面貼著會互相排斥!我們先來規範一下骰子 1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起,...