題意:用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 組互斥現象,每組中的那兩個數字的面緊貼在一起,...