51Nod - 1639 綁鞋帶
阿新 • • 發佈:2017-05-07
cnblogs 單獨 turn tdi namespace std ref 輸出 pac
51Nod - 1639 綁鞋帶
有n根鞋帶混在一起,現在重復n次以下操作:隨機抽出兩個鞋帶頭,把它們綁在一起。可以想象,這n次之後將不再有單獨的鞋帶頭,n條鞋帶系成了一些環。那麽有多大概率剛好所有這些鞋帶只形成了一個環? Input僅一行,包含一個整數n (2<=n<=1000)。Output
輸出一行,為剛好成環的概率。Input示例
2Output示例
0.666667
題解:
參考1: https://www.51nod.com/question/index.html#!questionId=1415
參考2: http://www.cnblogs.com/geek1116/p/6282878.html
看上去是很復雜的題目。 但是使用遞推的方法就簡單多了。
對於 f[i-1] 來說, f[i] 的成功情況是, 抓住一個鞋帶透, 只要剩下的 2*i - 1 中有 2*i 能組成一個環, 則這個頭連接上不取的那個,就可以成功匹配。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int main(){ freopen("in.txt", "r", stdin); double ans; int n, cnt; while(scanf("%d", &n) != EOF){ ans = 1.0; cnt = 2; for(int i=1; i<n; ++i){ ans = ans*( cnt*1.0 / (cnt + 1) ); cnt = cnt + 2; } printf("%.6f\n", ans ); } return 0; }
51Nod - 1639 綁鞋帶