zoukankan      html  css  js  c++  java
  • Codeforces 768D:Jon and Orbs

    Codeforces 768D:Jon and Orbs

    题目链接:http://codeforces.com/contest/768/problem/D

    题目大意:共有k种蛋,每天随机孵化其中一个,每次query每种蛋都至少有一个的概率>pi/2000需要多少天,一共询问q次。

    概率dp

    定义状态:dp[第i天][已孵化j种蛋]为改装状态下的概率;

    状态转移方程:dp[i][j]=[1-(j-1)/k]*dp[i-1][j-1]+(j/k)*dp[i-1][j];

    /*需要注意的是dp[i][0]=0,其中i>1*/

    我们可以离线处理所有询问(按pi升序排列),再恢复原排列输出,已达到询问总复杂度O(nlgn),

    观察到1≤pi≤1000,故亦可以保存对应pi=1 to 1000的ans,达到询问总复杂度O(n).

    代码如下:

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #define N 1005
     5 using namespace std;
     6 int n,k,q,ans[N],p;
     7 double dp[10*N][N];
     8 int main(void){
     9     scanf("%d%d",&n,&q);
    10     dp[0][0]=1;
    11     for(int i=1;i<10*N;++i){
    12         dp[i][0]=0;
    13         for(int j=1;j<=n;++j)
    14             dp[i][j]=(dp[i-1][j-1]*(n-j+1)+dp[i-1][j]*j)/n;
    15     }
    16     for(int i=1;i<=1000;++i){
    17         while(dp[k][n]*2000<i)k++;
    18         ans[i]=k;
    19     }
    20     while(q--){
    21         scanf("%d",&p);
    22         printf("%d
    ",ans[p]);
    23     }
    24 }
  • 相关阅读:
    Calendar日历类
    DateFormat类和SimpleDateFormat类
    Date时间类(java.util.Date)
    时间处理相关类
    不可变和可变字符序列使用陷阱
    String类
    搬圆桌问题
    重温经典之排序 java实现
    i++ 和 ++i
    Intellij Idea 使用技巧 updating
  • 原文地址:https://www.cnblogs.com/barrier/p/6426525.html
Copyright © 2011-2022 走看看