zoukankan      html  css  js  c++  java
  • loj 1038(dp求期望)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25915

    题意:求一个数不断地除以他的因子,直到变成1的时候 除的次数的期望。

    思路:设一个数的约数有num个,E[n] = (E[a[1]]+1)/num+(E[a[2]]+1)/num+...+(E[a[num]]+1)/num+1  ,而a[num]==n,于是整理得:

    E[n]=(E[a[1]]+E[a[2]]+...+E[a[num-1]]+num)/(num-1)。

    然后预处理出所有的结果。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 
     8 int n;
     9 double dp[111111];
    10 
    11 void Get_Dp()
    12 {
    13     dp[1]=0;
    14     for(int i=2;i<=100000;i++){
    15         int cnt=0;
    16         double sum=0;
    17         for(int j=1;j*j<=i;j++){
    18             if(i%j==0){
    19                 cnt++;
    20                 sum+=dp[j];
    21                 if(j*j!=i){
    22                     cnt++;
    23                     sum+=dp[i/j];
    24                 }
    25             }
    26         }
    27         dp[i]=(sum+cnt)/(cnt-1);
    28     }
    29 }
    30 
    31 int main()
    32 {
    33     Get_Dp();
    34     int _case,t=1;
    35     scanf("%d",&_case);
    36     while(_case--){
    37         scanf("%d",&n);
    38         printf("Case %d: %.10f
    ",t++,dp[n]);
    39     }
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    hdu1814 Peaceful Commission 2-SAT
    上传下载文件
    文件下载类
    文件操作类
    MD5加密帮助类
    加密解密类
    发送邮件函数
    DataTable 分页
    服务器缓存帮助类
    Cookie帮助类
  • 原文地址:https://www.cnblogs.com/wally/p/3355568.html
Copyright © 2011-2022 走看看