Bzoj2510 弱題(矩陣快速冪)

2022-05-07 19:30:07 字數 1053 閱讀 3325

一道概率$dp$,可以設$f[i][j]$表示第$i$次操作後,標號為$j$的小球的期望個數,那麼有:

$$\begin

&f[i][j]=(1-\frac 1m)f[i-1][j]+\frac1mf[i-1][j-1](1\leq j\leq n) \

&f[i][0]=(1-\frac 1m)f[i-1][j]+\frac1mf[i-1][n]

\end

$$這樣的話轉移可以寫成矩陣的形式(假設有$4$個小球):

$$\begin

&\begin

f[i-1][1]&f[i-1][2]&f[i-1][3]&f[i-1][4]

\end

\times

\begin

1-\frac 1m&\frac 1m&0&0\

0&1-\frac 1m&\frac 1m&0\

0&0&1-\frac 1m&\frac 1m\

\frac 1m&0&0&1-\frac 1m

\end

\=&\begin

f[i][1]&f[i][2]&f[i][3]&f[i][4]

\end

\end

$$可以發現轉移矩陣也是乙個迴圈矩陣,也就是說,可以$o(n^2log_2k)$做。

#include #include #include using std::min; using std::max;

using std::swap; using std::sort;

typedef long long ll;

templatevoid read(t &x)

while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); x *= flag;

}const int n = 1e3 + 10;

int n, m, k; double s[n], t[n], tmp[n];

void mul(double s, double t)

int main ()

bzoj2510 矩陣乘法 DP 弱題

description 有m個球,一開始每個球均有乙個初始標號,標號範圍為1 n且為整數,標號為i的球有ai個,並保證 ai m。每次操作等概率取出乙個球 即取出每個球的概率均為1 m 若這個球標號為k k n 則將它重新標號為k 1 若這個球標號為n,則將其重標號為1。取出球后並不將其丟棄 現在你...

矩陣快速冪模板題

a為乙個方陣,則tr a表示a的跡 就是主對角線上各項的和 現要求tr a k 9973。資料的第一行是乙個t,表示有t組資料。每組資料的第一行有n 2 n 10 和k 2 k 10 9 兩個資料。接下來有n行,每行有n個資料,每個資料的範圍是 0,9 表示方陣a的內容。對應每組資料,輸出tr a ...

BZOJ 4547 矩陣快速冪

思路 肯定每回只加最大值和次大值 如果 一開始的最大值 0且次大值 0 那就一直加 加到次大值 0 搞乙個矩陣 推斐波那契數列 求和 就好 by siriusren include include include using namespace std const int mod 10000007,...