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\n",++cas,dp[0]); 17 } 18 return 0; 19 }
心之所动 且就随缘去吧