zoukankan      html  css  js  c++  java
  • 概率DP light oj 1038

    t个数据

    然后一个n

    输出变成1的期望

    看个数据

    dp[n]代表n变成1的期望

    cnt代表因子个数 pi代表因子

    那么dp[n]=1/cnt*(dp[n/p1]+1)+1/cnt*(dp[n/p2]+1)...

                                  为什么加1呢    就是走到这个数要加一步

    整理可得dp[n]=1/(cnt-1)(dp[n/p1]+dp[n/p2]...+cnt);

     1 #include <stdio.h>
     2 #include<algorithm>
     3 #include<math.h>
     4 
     5 using namespace std;
     6 
     7 #define MAXN 100010
     8 
     9 double dp[MAXN];
    10 
    11 int main()
    12 {
    13     int t,ca;
    14     scanf("%d",&t);
    15     ca=1;
    16     dp[1]=0;
    17 
    18     for(int i=2;i<=100000;i++)
    19     {
    20         double en=sqrt(1.0*i);
    21         int cnt=0;
    22         dp[i]=0;
    23 
    24         for(__int64 j=1;j<=en;j++)
    25         {
    26             if(i%j==0)
    27             {
    28                 if(i/j==j)  //去一下同样的
    29                 {
    30                     cnt++;
    31                     dp[i]+=dp[j];
    32                 }
    33                 else
    34                 {
    35                     cnt+=2;
    36                     dp[i]+=dp[i/j];
    37                     dp[i]+=dp[j];
    38                 }
    39             }
    40         }
    41         dp[i]=(dp[i]+cnt)/(cnt-1);
    42     }
    43 
    44     while (t--)
    45     {
    46         int n;
    47         scanf("%d",&n);
    48         printf("Case %d: %.6lf
    ",ca++,dp[n]);
    49     }
    50 
    51     return 0;
    52 }
  • 相关阅读:
    我开博客了,啦啦啦.
    cf593div2
    Comet OJ
    cf591div2abc
    cfround586ac
    cf589div2
    cf573div2
    Codeforces Round #569 (Div. 2)
    uva11729 水题
    luogu1984 [SDOI2008] 烧水问题
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6083592.html
Copyright © 2011-2022 走看看