768D. Jon and Orbs
阿新 • • 發佈:2020-09-23
題目連結:https://codeforces.com/problemset/problem/768/D
題意:有一隻鳥每天在樹下下一個蛋,他可以下n種蛋,每種蛋的概率一樣。有q次詢問,問至少多少天后,樹下有n種蛋的概率大於等於p/2000。
思路:概率dp,dp[i][j]表示前i天下了j種蛋,首先臨界值為dp[1][1]=1,然後對於其他的,鳥每天下一個蛋,那種蛋他可能下過,也可能沒下過,
轉移方程為dp[i][j]=(double)(n-j+1)/n*dp[i-1][j-1]+(double)j/n*dp[i-1][j];
#include<bits/stdc++.h> #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; double dp[10005][1005]; int main() { int n,q; cin>>n>>q; dp[1][1]=1; for(int i=2;i<=10000;i++) { for(int j=1;j<=i&&j<=n;j++) dp[i][j]=(double)(n-j+1)/n*dp[i-1][j-1]+(double)j/n*dp[i-1][j]; if(dp[i][n]>=0.5) break; } while(q--) { double x; cin>>x; double sum=x/2000; for(int i=1;;i++) { if(dp[i][n]>=sum) { cout<<i<<endl;break; } } } }