這道題是一道非常基本的期望的題目,我們只需要抓住關鍵,就是我們遞推直接進行dp就可以了,至於我們的最短路部分,因為資料並不是非常的大,所以說我們直接使用弗洛伊德演算法即可。然後根據期望的定義,我們使用期望等於概率乘上價值進行計算即可,然後使用刷表法每次判最小進行遞推即可。
本人ac**:
#includeusing namespace std;
const int n=2e3+5;
const double inf=0x7fffffff;
int n,m,v,e,c[n],d[n],mp[305][305];
double k[n],dp[n][n][2];
void init()
for(int k=1;k<=v;++k)
for(int i=1;i<=v;++i)
for(int j=1;j<=v;++j)
mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
for(int i=1;i<=v;++i) mp[i][i]=mp[i][0]=mp[0][i]=0;
for(int i=0;i<=n;++i) for(int j=0;j<=m;++j) dp[i][j][0]=dp[i][j][1]=inf;
dp[1][0][0]=dp[1][1][1]=0;
}int main()
}double ans=inf;
for(int i=0;i<=m;++i)ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
printf("%.2lf",ans);
return 0;
}
P1850 換教室 概率dp
其實說是概率dp,本質上和dp沒什麼區別,就是把所有可能轉移的情況全列舉一下就行了,不過dp方程確實有點長。ps 這個題的floyed我竟然之前寫跪了。題目 題目描述 對於剛上大學的牛牛來說,他面臨的第乙個問題是如何根據實際情況申請合適的課程。在可以選擇的課程中,有 2n2n2n 節課程安排在 nn...
P1850 換教室 期望DP
對於剛上大學的牛牛來說,他面臨的第乙個問題是如何根據實際情況申請合適的課程。在可以選擇的課程中,有 2n2n2n 節課程安排在 nnn 個時間段上。在第 iii 1 i n1 leq i leq n1 i n 個時間段上,兩節內容相同的課程同時在不同的地點進行,其中,牛牛預先被安排在教室 cic i...
P1850 換教室 dp 期望
流下了不會概率的眼淚,由於不會概率,轉移少寫了點東西。這個dp很簡單,就是乙個普通的線性dp加點期望。剛開始寫這道題時信筆寫下 dp 0 1 i j 表示到第 i 個時間段時,已經申請了換 j 門課程的教室,當前申請0不換 1換教室的最小數學期望。注意,我們的狀態定義是申請,而不是已經申請成功,這樣...