CF768D Jon and Orbs
题目链接:https://codeforces.ml/problemset/problem/768/D
思路:dp[i][j] 代表 前i天取到了j张卡的概率 那么每天可以由上一天加上今天有没有
抽到新卡来转移 枚举到10000是为了确保能找到大于p/2000的值 当然也可以只用一维的数组存
第二层循环倒序即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define pb push_back 5 const int mod=1e4; 6 const int maxn=1e4+10; 7 double dp[maxn][2222]; 8 9 10 int main() 11 { 12 ios::sync_with_stdio(0); 13 cin.tie(0); 14 int k,q; 15 cin>>k>>q; 16 dp[1][1]=1; 17 for(int i=2;i<=10000;i++) 18 { 19 for(int j=1;j<=min(i,k);j++) 20 { 21 dp[i][j]=1.0*j/k*dp[i-1][j]+1.0*(k-j+1)/k*dp[i-1][j-1]; 22 } 23 } 24 //cout<<dp[3][3]<<" debug"<<'\n'; 25 while(q--) 26 { 27 double p; 28 cin>>p; 29 p/=2000.0; 30 int num=0; 31 for(int i=1;i<=10000;i++) 32 { 33 if(dp[i][k]>=p) 34 { 35 num=i; 36 break; 37 } 38 } 39 cout<<num<<'\n'; 40 } 41 42 43 }
                    
                
                
            
        
浙公网安备 33010602011771号