lightoj 1038 - Race to 1 Again

来源:互联网 发布:唯品会 淘宝 编辑:程序博客网 时间:2024/04/30 07:55

动态规划求数学期望

题目的意思是说任何一个大于1的整数,, 经过若干次除以自己的因子之后可以变为1, 求该变换字数的数学期望值。

例如 16 数以自己的因子之后可以变为1 2 4 8 16;有数学期望的计算公式可得该数学期望为1 2 4 8 16的数学期望之和

由此可得递推公式

#include <cstdio>#include <cmath>double dp[100000+10];int main(){int i, j, cnt;double sum;    dp[1] = 0;for(i=2; i<=100000; i++)  {   sum = 0;  cnt = 0;  for(j=1; j<=sqrt(1.0*i); j++)    if(i % j == 0)     {     sum += dp[j];     cnt++;     if(j!=1 && i/j != j)       {       sum += dp[i/j];       cnt++;       }     }  cnt++;  sum += cnt;  dp[i] = sum / (cnt - 1);  }int t, n, ca;ca = 1;scanf("%d", &t);while(t--)  { scanf("%d", &n); printf("Case %d: %.20f\n", ca++, dp[n]);  }return 0;}