程式開發換教室問題解析

2022-04-05 07:32:38 字數 1571 閱讀 2405

程式開發換教室問題解析

爆搜。暴力列舉要換的教室,計算期望值,不斷更新答案。

我寫了兩個dfs函式。第乙個用來列舉換的教室,第二個用來算期望值,寫的很醜,望見諒。

得分:80分。233

補充一下遞迴實現指數型列舉的模板。

這等價於每個整數可以選或不選,所有可能的方案總數共有2n" role="presentation">2n2n種。

vectorchosen;

inline void calc(int x)

while (ch >= '0'&&ch <= '9')

return f * x;

}const int maxn = 2005, maxv = 305;

const double inf = (double)0x3f3f3f;

int n, m, v, e, c[maxn], d[maxn], dis[maxv][maxv], v[maxn], cnt;

double k[maxn], ans = inf;

bool chosen[maxn];

inline void dfs2(int now,double &qiwang)

else

}else

else

} }

double probability = 1.0;

for (register int i = 1; i <= cnt; i++)

else

} qiwang += (double)dist*probability;

return;

} dfs2(now + 1, qiwang);

chosen[v[now]] = true;

dfs2(now + 1, qiwang);

chosen[v[now]] = false;

}inline void dfs(int now)

dfs(now + 1);

v[++cnt] = now;

dfs(now + 1);

cnt--;

}inline void init(void)

for (register int i = 1; i <= n; i++)

for (register int i = 1; i <= n; i++)

//floyd

memset(dis, 0x3f, sizeof dis);

for (register int i = 1; i <= v; i++)dis[i][i] = 0;

for (register int i = 1; i <= e; i++)

for (register int k = 1; k <= v; k++)

for (register int i = 1; i <= v; i++)

for (register int j = 1; j <= v; j++)

dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);

return;

}inline void solve(void)

int main()

P1850 換教室 題解

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

2016 NOIP提高組 換教室 題解

題目傳送門 題目大意 牛牛要上 n nn 天課,第 i ii 天在 c i c i c i 號教室,可以申請換至多 m mm 天的教室,第 i ii 天有 p i p i p i 的申請成功機率,申請成功的話就可以在 d i d i d i 號教室上課,第 i ii 天上完課後要走到第 i 1 i ...

洛谷P1850 題解 換教室

題目戳此 乙個比較毒瘤的dp題。設f i j 1 0 為前i個時段 申請j次 第i個時段申請成功與否 思考下面幾種情況 一 i未申請f i j 0 1 i 1申請 1.i 1申請成功 2.i 1申請失敗 2 i 1未申請 二 i申請f i j 1 1 i 1申請 1.前後均成功 2.前成功後失敗 3...