逃課
- 描述
-
在一個星期三的早上,某同學想用扔硬幣的方式來決定是否要去上算法課。
他扔 n 次硬幣,如果當中有連續 m 次以上(含 m 次)的結果都是正面,那麼他就去上課,否則就接着睡覺。(假設每次扔硬幣扔出的正反兩面的概率都是 0.5。)
- 輸入
-
輸入的每行有一組數據,分別爲 n 和 m (0 < n <= 2000, 0 < m <= 10)。輸入以 0 0 結尾。
- 輸出
-
對於每組數據,輸出他去上課的概率,四捨五入保留小數點後 2 位。
- 樣例輸入
-
1 1 2 1 5 5 100 5 2000 5 2 3 0 0
- 樣例輸出
-
0.50 0.75 0.03 0.81 1.00 0.00
分三種情況討論:
-
-
1. n小於m,即dp數組下標i要小於m的時候,概率值都爲0,原因如上所述。
2. 下標i等於m,也就是說n等m,投多少次剛好多少次是正面,這個概率是0.5的m次方
3. 下標i大於m,即n大於m的時候,這個又要分兩種情況,概率是這兩種情況之和:
(1). 在i之前已經有m次連續了,如果恰好前面第i-1個是連續m次,那第i次如果是正面的話就是連續m+1次符 合題目要求,如果第i次是反面的話那恰好就是m次也滿足題目,也就是說他第i次無論是正面還是反面都滿足條 件,所以dp[i]的概率第一種情況由dp[i-1]組成。
(2). 第i次的時候恰好連續了m次,也就是說他前面m-1次都是正面,那他前面m次的那次是必須是一個反面, 否則不能剛好在第i次的時候連續m次正面了。他前面m次的那次是一個反面,那個反面的前一次有連續m次的概率是 dp[i-(m+1)],那他沒有連續m次正面的概率是1-dp[i-(m+1)],他後面的那次是反面,所以概率是0.5然後接着有m 次的0.5概率,即總共是0.5的m+1次方。第二種情況的概率是:dp[i-(m+1)]*pow(0.5, m),所以第三種情況的概率 是他們兩個之和:dp[i-1]+(1-dp[i-(m+1)])*pow(0.5, m)
http://www.bianchengla.com/course/ds/practise/problem?id=1321
C版(注意輸出)
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- double dp[2001];
- int m, n, i;
- scanf("%d", &n);
- scanf("%d", &m);
- while(n != 0 && m != 0)
- {
- for(i = 0; i < m; i++)
- dp[i] = 0;
- dp[m] = pow(0.5, m);
- for(i = m+1; i <= n; i++)
- dp[i] = dp[i-1] + (1-dp[i-m-1])*pow(0.5, m+1);
- printf("%.2lf/n", dp[n]);
- scanf("%d", &n);
- scanf("%d", &m);
- }
- return 0;
- }
C++版(注意輸出)
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- using namespace std;
- int main()
- {
- //用動態規劃解這道題
- double dp[2001];
- //dp[i]代表投完第i個硬幣時,已有連續m個正面的概率。
- int n,m;
- cin>>n>>m;
- while(n!=0 && m!=0)
- {
- for(int i=0;i<m;i++)
- dp[i]=0;//當投幣次數小於m時,自然不可能有m個正面。
- dp[m]=pow(0.5,m);//投幣次數爲m,全是正面。
- for(int i=m+1;i<=n;i++)
- dp[i]=dp[i-1]+(1-dp[i-m-1])*pow(0.5,m+1);
- //投完第i個硬幣時,已有連續m個正面的情況分爲兩種:
- //1.投第i個之前已經有連續m個正面,概率爲dp[i-1]。
- //2.投完第i個時恰好有連續m個正面,這連續m個正面的前面一次是反面,
- // 這m+1次確定情況的概率是1/2的m+1次方;
- // 這m+1次以前沒有連續m個正面的概率爲1-dp[i-(m+1)]。
- // 所以投完第i個時恰好有連續m個正面的概率爲(1-dp[i-m-1])*pow(0.5,m+1)。
- cout<<fixed<<setprecision(2)<<dp[n]<<endl;
- cin>>n>>m;
- }
- return 0;
- }
博文原址:http://blog.csdn.net/kingxueyuf/article/details/7238396
-