期望入門 PoJ2096 總結

2021-08-08 11:46:26 字數 2471 閱讀 7891

發現圖包根本用不完系列

time limit: 10000ms memory limit: 64000k

total submissions: 1485 accepted: 647

case time limit: 2000ms special judge

description

input file contains two integer numbers, n and s (0 < n, s <= 1 000).

output the expectation of the ivan』s working days needed to call the program disgusting, accurate to 4 digits after the decimal point.

1 23.0000

northeastern europe 2004, northern subregion

好吧我承認這是一道水題,但由此題入門期望再適合不過:

有n種bug和s個系統,求發現在s個系統中,各個系統n中全部都出現 的概率天數;

設dp[i][j]為在i個系統中,各個系統j中全部都出現 的概率天數;

那麼dp[s][n] = 0,因為啥都沒有的話0天便可以看出是肯定的;

而轉移勒?

dp[i][j] 的轉移便是把(所有可能情況 + 1)*他們各自轉移過來的概率

【注】 此處加1代表是轉移1步,過了一天

上述結論由下圖

所以有一下結論:

dp[i][j] = p1 * (dp[i][j] + 1) + p2 ( dp[i + 1][j] + 1) + p3 ( dp[i][j + 1] + 1) + p4 * (dp[i + 1][j + 1] + 1)

dp[i][j] * (1 - p1) = p2 * dp[i + 1][j] + p3 * dp[i][j + 1] + p4 * dp[i + 1][j + 1] + (p1 + p2 + p3 + p4)

dp[i][j] = (p2 * dp[i + 1][j] + p3 * dp[i][j + 1] + p4 * dp[i + 1][j + 1] + (p2 + p3 + p4 + p1)) / (1 - p1)

【注】p1 , p2 , p3 , p4代表概率

p1 = i * j / (n * s)

p2 = (s - i) * j / (n * s)

p3 = i * (n - j) / (n * s)

p4 = (s - i)* (n - j) / (n * s)

p1 + p2 + p3 + p4 = 1;

這裡有一點需要注意:

由於概率是平均概率,所以等式左右我們看到dp [i][j]是等價的,所以可以將其合併,不用過多的去細想:「dp [i][j]由dp [i][j]推來可以推無限遍那麼咋搞啊?」的疑問;

那麼這道題遍可以這樣水過去了,廢話少說,直接上**

/*

dp[i][j] = p1 * dp[i][j] + p2 * dp[i + 1][j] + p3 * dp[i][j + 1] + p4 * dp[i + 1][j + 1]

dp[i][j] * (1 - p1) = p2 * dp[i + 1][j] + p3 * dp[i][j + 1] + p4 * dp[i + 1][j + 1]

dp[i][j] = (p2 * dp[i + 1][j] + p3 * dp[i][j + 1] + p4 * dp[i + 1][j + 1] + 1) / (1 - p1)

注意!!!這裡加1是應為所以轉移的概率之和為1,但有些情況下轉移過來的情況的概率不一定為1,這哪是為概率之和

p1 = i * j / (n * s)

p2 = (s - i) * j / (n * s)

p3 = i * (n - j) / (n * s)

p4 = (s - i)* (n - j) / (n * s)

dp[i][j] = (dp[i+1][j] * (s - i) * j + dp[i][j+1] * (s - j)*i + dp[i+1][j+1]*(s - i)*(s - j) + n*s)/(n*s - i*j)

*/#include

#include

#include

#include

#define m 1200

using namespace std;

int n , s;

double dp[m][m];

int main()

printf("%.4f\n",dp[0][0]);

}

}

POJ2096題解 期望dp

1.有無數個bug 2.將無數個bug分為n種,s類 3.期望意義上,多少天能至少在n種s類裡都找到乙個bug 這道題和hdu4336很像。原子操作 atom operation 為每天找出乙個bug,這個bug 有可能是已找出的i種bug中的一種,這個概率為i n 有可能是已找出的j類bug中的一...

poj2096 概率dp入門

題意 乙個系統有s個子系統,一共會產生n中bug。某人一天可以發現乙個bug,這個bug屬於乙個子系統,屬於乙個種類,每個bug屬於某個子系統的概率是1 s,屬於某個分類的概率是1 n,問發現n種bug並且每個子系統都發現bug的天數的期望。分析 簡單的入門概率dp,在這之前沒有做個這個型別,所以講...

Poj 2096 dp求期望 入門

dp求期望的題。題意 乙個軟體有s個子系統,會產生n種bug。某人一天發現乙個bug,這個bug屬於某種bug,發生在某個子系統中。求找到所有的n種bug,且每個子系統都找到bug,這樣所要的天數的期望。需要注意的是 bug的數量是無窮大的,所以發現乙個bug,出現在某個子系統的概率是1 s,屬於某...