poj3744 概率dp 矩陣乘法

2021-08-01 12:40:21 字數 962 閱讀 8328

在一條路上有n個地雷,有個sb人按照心情走在這條路上,往前走1步的概率是p,往前走2步的概率是(1-p),求他活著走過這條路的概率。

很容易想到一種dp方程:f[i]=p*f[i-1]+(1-p)*f[i-2];

然而一看範圍:[1, 100000000]

怎麼可能不超時呢……

然後可以這麼想:只要避開了最後乙個地雷不就安全了嗎?我們把路分成n段,分別是1~地雷1位置,地雷1位置+1~地雷2位置,地雷2位置+1~地雷3位置,每次的目標是避開每段最後那個地雷。

然後我們可以用矩陣快速冪來加速,因為顯然: =∗

然後初始值f[1]=1,f[2]=p;所以進行當前這一段長度-1的矩陣乘法後,處在左上角的那個數就是踩到地雷的概率了。

不過這個概率是建立在f[1]=1的基礎上的,而對於不是第一段的段,最初的f值不一定是1,不過也沒關係,顯然那個值就是避開了前一段地雷,活著來到這一段的值啦。所以每次矩陣快速冪後進行ans=ans*(1-mat[0][0]);的操作即可!

如果有不懂的地方看看**可能就懂了呢。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n;double p;

int a[12];

struct jz;

jz mul(jz x,jz y)

return re;

}jz pow(jz aa,int n)

aa=mul(aa,aa);

n>>=1;

}return ans;

}int main()

printf("%.7f\n",ans);

}return

0;}

poj 3744 概率dp 矩陣快速冪

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

poj 3744 矩陣優化的概率DP

題意 你在一條布滿地雷的道路上,開始在座標1。每次有概率p向前走一步,有概率1 p向前走兩步。道中路某幾個點上會有地雷,問你安全通過的概率。地雷數n 10,座標範圍在100000000內。假設dp i 表示安全走到i點的概率,那麼dp i p dp i 1 1 p dp i 2 很簡單的乙個轉移,可...

POJ3744題解 概率dp,矩陣快速冪

士兵從起點1出發,每次移動有p的概率走一步,有1 p的概率走兩步,已知有n個格仔有地雷,問士兵不踩地雷的概率。第一道真正意義上的概率dp題目,一開始打算令dp i 意為更新到i點時踩雷的概率,dp i p dp i 1 1 p dp i 2 這樣寫看上去也是對的 第一眼看上去的角度上來說 但是其實並...