1. 程式人生 > >[洛谷P1850]換教室 概率與期望

[洛谷P1850]換教室 概率與期望

題目←
要分清哪些狀態是獨立的,哪些狀態對期望有影響
一開始傻傻的在通過和沒通過之間取min……
事實上,在求期望的前提下,真正影響的決策是是否申請
以及萬萬沒想到Floyd打次了
map[i][i] = 0才對

發現當前時間段的狀態僅僅可以由上一時間段的狀態轉移來
上一時間段的情況可能有以下幾種

1、申請了換教室,過
2、申請了換教室,沒過
3、沒申請換教室

如果沒有概率且我們要求的只是最大/最小值,就在換、未換兩種情況裡取min
但發現我們每個時間段需要做的決策不是換/不換
而是申請/不申請
(1、2兩種狀態不是我們能夠決策的,他們出現的概率已經確定)
所以每個時間點就申請/不申請劃分狀態
dp[i][j][0/1]表示i時間段,總共申請了j段,而第i段申請/未申請

來梳理狀態間的關係:
Bi為原教室,Ci為更換後的教室
求i - 1 ~ i距離的時候,可能出現的狀況有:
1、第i - 1時間段在Bi1,第i時間段在Bi
2、第i - 1時間段在Ci1,第i時間段在Bi
3、第i - 1時間段在Bi1,第i時間段在Ci
4、第i - 1時間段在Ci1,第i時間段在Ci

當階段i我們選擇不申請時:
第i時間段在Bi的概率:1
第i時間段在Ci的概率:0

若從第i - 1階段未申請的狀態轉移過來
第i - 1時間段在Bi1的概率:1
第i - 1時間段在Ci1的概率:0
綜上,這個轉移為
dp[i][j][0] = dp[i - 1][j][0]
+ map[B

i1][Bi] * 1 * 1
+ map[Ci1][Bi] * 0 * 1
+ map[Bi1][Ci] * 1 * 0
+ map[Ci1][Ci] * 0 * 0;

類比一下,若從i - 1申請了的狀態轉移過來
第i時間段在Bi的概率:1
第i時間段在Ci的概率:0
第i - 1時間段在Bi1的概率:P[i - 1]
第i - 1時間段在Ci1的概率:1 - P[i - 1]

這個轉移為
dp[i][j][0] = dp[i - 1][j][1]
+ map[Bi1][Bi] * (1 - P[i]) * 1//i - 1申請失敗
+ map[Ci1][Bi] * P[i] * 1//i - 1申請成功
+ map[B

i1][Ci] * 1 * 0//失敗
+ map[Ci1][Ci] * 0 * 0;//成功

繼續類比
當階段i我們選擇申請時:
轉移同樣有兩種可能,i - 1申請/未申請
i - 1未申請時:
第i時間段在Bi的概率:P[i]
第i時間段在Ci的概率:(1 - P[i])
第i - 1時間段在Bi1的概率:1
第i - 1時間段在Ci1的概率:0
這個轉移為:
dp[i][j][0] = dp[i - 1][j][0]
+ map[Bi1][Bi] * 1 * P[i]
+ map[Ci1][Bi] * 0 * P[i]
+ map[Bi1][Ci] * 1 * (1 - P[i])
+ map[Ci1][Ci] * 0 * (1 - P[i]);

若從i - 1申請轉來
第i時間段在Bi的概率:P[i]
第i時間段在Ci的概率:(1 - P[i])
第i - 1時間段在Bi1的概率:P[i - 1]
第i - 1時間段在Ci1的概率:1 - P[i - 1]
這個轉移為:
dp[i][j][0] = dp[i - 1][j][0]
+ map[Bi1][Bi] * P[i - 1] * P[i]
+ map[