POJ 3744 數學題概率題 矩陣乘冪

2021-08-31 02:54:17 字數 1121 閱讀 5733

轉的網上的解題報告用於備戰校賽

按照題目的意思,我們很容易推出公式:

f[i] = p*f[i-1] + (1-p)*f[i-2];

f[i]表示到達位置i的概率(不是安全到達那些很複雜之類的概率,就只是簡單的到達的概率),p為題目給的概率

由於有的原因,就不能直接算了。

這裡我用 x[i]表示第i顆的位置

但如果把整個過程按照來分階段,起點為x[i-1]+1,終點為x[i],這樣每個階段就只有終點有了(這就很容易算可達概率了)

所以我們可先算在階段 i ,從起點x[i-1]+1到x[i]的概率qi,這個概率就表示踩到x[i+1]的概率了,那麼1-qi就表示這一階段安全的概率了(我有點不是很明白的就是它具體跳到**去了,不過如果按照這樣劃分階段的模型,很容易知道結果是正確的)

所以把每個階段安全可達的概率乘起來就是總的概率了(1-q1)(1-q2)...(1-qn)

這裡需要用矩陣乘法快速冪來加速

觀察公式

f[i] = p*f[i-1] + (1-p)*f[i-2];

跟fibonacci數列很像,可用poj3070的方法來構造

| p 1 |

| 1- p 0 |

然後就可用快速冪加速了!

#include #include #include using namespace std; const double esp = 1e-15; struct matrix; for (int i = 0;i < 2;i++) for (int k =0 ;k < 2 ;k ++) if (matrix[i][k]>esp) for (int j = 0;j < 2;j++) return ans; } }unit = ; matrix pow(matrix a,int n) p = p*p; n>>=1; } return ans; } double p; double cal(int i,int j); a = pow(a,j-i-1); return p*a.matrix[0][0] + a.matrix[1][0]; } int main(); while(scanf("%d%lf",&n,&p) != eof) double ans = 1; for ( i = 1;i <= n;i++) printf("%.7lf/n",ans); } return 0; }

POJ 3744 數學題概率題 矩陣乘冪

轉的網上的解題報告http hi.baidu.com rpsproblem blog item d2cbe67aa1d8b5fd0bd1875f.html,用於備戰校賽 按照題目的意思,我們很容易推出公式 f i p f i 1 1 p f i 2 f i 表示到達位置i的概率 不是安全到達那些很複...

poj3744 概率dp 矩陣乘法

在一條路上有n個地雷,有個sb人按照心情走在這條路上,往前走1步的概率是p,往前走2步的概率是 1 p 求他活著走過這條路的概率。很容易想到一種dp方程 f i p f i 1 1 p f i 2 然而一看範圍 1,100000000 怎麼可能不超時呢 然後可以這麼想 只要避開了最後乙個地雷不就安全...

poj 3744 概率dp 矩陣快速冪

poj 3744 題目大概是 小明要走一段路 有p的概率走一步 1 p 的概率走兩步 然後上面有雷 問安全通過的概率 題目通過雷把路程分為多段 把每段安全通過的概率相乘 就是整段安全通過的概率 設dp i 是小明安全到i的概率 到i的方式有兩種 一種是從 i 1 走一步 第二種是從 i 2 走兩步 ...