概率/期望 DP Jon and Orbs
题目链接:Problem - D - Codeforces
题目大意:
需要收集 k (k <= 1000)个球,初始一个球都没有,每次有等同概率得到任意一个球,求要想收集完全整套魔法球(每种至少一个)的概率至少是 的期望次数。其中
。询问若干个 pi ,对于每个 pi 输出对应的答案。
Solution:
设 为拿了 i 次之后收集了 j 种球的概率。
可以直接预处理出 f(1~10000,j) 的所有值,然后二分答案即可。
Code:
#include<cstdio>
#include<cstring>
using namespace std;#define N 1005int k,T,p,ans;
double f[N * 10][N],bar;int min(int x,int y) { return x < y ? x : y ; }int main()
{scanf("%d%d",&k,&T);f[0][0] = 1.00;for (int i = 0;i <= 10000;++ i){for (int j = 0;j <= min(i,k);++ j)f[i + 1][j + 1] += (double)(k - j) / (double)k * f[i][j],f[i + 1][j] += (double)j / (double)k * f[i][j];}while (T --){scanf("%d",&p);bar = (1.00 * p - (1e-8)) / 2000.00;int l = 1;int r = 10000;while (l <= r){int mid = (l + r) >> 1;if(f[mid][k] >= bar) ans = mid,r = mid - 1;else l = mid + 1;}printf("%d\n",ans);}return 0;
}