程式開發換教室問題解析
爆搜。暴力列舉要換的教室,計算期望值,不斷更新答案。
我寫了兩個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...