換教室(動態規劃 floyed)

2021-08-14 12:15:29 字數 947 閱讀 7941

終於ac了,,好開心啊,,

這道題我第一眼看到時頭很大,因為題幹很長,不過型別很好判斷

概率dp+最短路

首先floyed求出兩兩間的最短路,記為d[i][j]

f[i][j][1/0]表示在第i個時間段,申請了j個教室,1表示通過,

0表示不通過

a[i]表示原來時間段的教室,b[i]表示更換後的教室,c[i]表示申請成功的概率

轉移狀態時,當前時間段是由上乙個時間段申請轉移和不申請轉移

申請又分為申請通過和不通過

於是就有了狀態轉移方程:

f[i][j][0] = min(f[i-1][j][0] + d[a[i-1]][a[i]], f[i-1][j][1] + d[a[i-1]][a[i]] (1 - c[i-1]) + d[b[i-1]][a[i]] c[i-1]);

f[i][j][1] = min(f[i-1][j-1][0] + d[a[i-1]][a[i]] (1.0-c[i]) + d[a[i-1]][b[i]] c[i], f[i-1][j-1][1] + d[a[i-1]][a[i]] (1.0-c[i-1]) (1.0-c[i]) + d[b[i-1]][a[i]] c[i-1] (1.0-c[i]) + d[a[i-1]][b[i]] (1.0-c[i-1]) c[i] + d[b[i-1]][b[i]] c[i-1] c[i]);

附上**

#include#include#include#includeusing namespace std;

const int maxn=2018,maxm=310;

int a[maxn],b[maxn];

double d[maxm][maxm],c[maxn],f[maxn][maxn][2];

int cnt=0;

int n,m,v,e;

void init()

{ for(int i=0;i

洛谷 1850 換教室

有n個時間段,每個時間段有2節課,最多可以換m次課,概率給出 把校園抽象成無向圖,求耗費最小體力值這是一道期望dp,f i j k 表示考慮到第i個教室,換了j次,k為0 1,表示這次是否換 分四種情況,具體見 double的輸入提示符是 lf,不是 llf include include incl...

算進 換教室(期望dp)

acwing 題目位址 洛谷 題目位址 特水的一道題,但是聯賽前是半抄題解過的,今天再做一遍。決策特別明顯 第 i 節課申請換教室或者不申請換教室。根據期望的定義 不申請,則期望消費就是上乙個教室到這乙個教室的路程 如果上一次申請的話,上一次的教室就有兩種可能,就要乘上相應的概率 申請,則期望消費就...

P1850 換教室 題解

題意 有 v 間教室,教室之間有 e 條雙向邊連線,從乙個教室走到另乙個教室需要一 定時間.有 n 節課,第 i 節課有兩間教室,預設要去第 c i 間教室,可以申請到 第 d i 間教室去,申請通過的概率為 p i 所有申請必須在最開始提交.求出提 交申請個數不超過 m 的情況下,依次上完這 n ...