一道概率$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,...