1. 程式人生 > 實用技巧 >768D. Jon and Orbs

768D. Jon and Orbs

題目連結: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; } } } }