lightoj 1248 Dice (III) 期望 DP

dp[i]表示一共n面,已经看见i面,需要多少次看完所有面的期望。

dp[n] = 0。

dp[i] = i / n * dp[i] + (n - i) / n * dp[i + 1] + 1移项处理下就行了。

dp[i] = dp[i + 1] + n / (n - i)

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int T,cas,n;
 5 double dp[100010];
 6 int main()
 7 {
 8     for (scanf("%d",&T);T != 0;T--)
 9     {
10         scanf("%d",&n);
11         dp[n] = 0;
12         for (int i = n - 1;i >= 0;i--)
13         {
14             dp[i] = dp[i + 1] + (double)n / (n - i);
15         }
16         printf("Case %d: %.6lf
",++cas,dp[0]);
17     }
18     return 0;
19 }
心之所动 且就随缘去吧
原文地址:https://www.cnblogs.com/iat14/p/11412937.html