1 /*UVA11427*/
2 /*概率期望:
3 独立重复事件A(p,n):
4 p:一件事情发生的概率为p
5 n:最多重复n次
6 要求:1、q=成功次数/实验次数>p 结束实验;
7 所求:n次实验后,q一直小于等于p
8
9 初始思考:
10 ans=1-补集;
11 补集=p+(1-p)*p......这样不好控制,因为无法手动枚举出所有的情况
12
13 优化:
14 dp(i,j):发生i次实验,没有达成跳出条件,且发生了j次成功的概率
15 dp(i,j)=d(i-1,j-1)*p+dp(i-1,j)*(1-p) 满足j/i<=p;
16 p(A)=d(n,0)+d(n,1)+d(n,2)+d(n,3).....+d(n,i) i/n<=p
17 ans=1/p(A)
18
19 边界 :
20 memset(dp,0);
21 dp(0,0)=1;
22
23
24 */
25 #include<iostream>
26 #include<stdio.h>
27 #include<string.h>
28 #include<algorithm>
29 #include<stdlib.h>
30 #include<math.h>
31 #include<queue>
32 #include<vector>
33 #include<map>
34
35 using namespace std;
36
37 double dp[105][105];
38 int main()
39 {
40 int t,pi,pj,n;
41 double p;
42 cin>>t;
43
44 for(int cas=1;cas<=t; cas++)
45 {
46 scanf("%d/%d %d",&pi,&pj,&n);
47 p=(pi+0.0)/pj;
48 memset(dp,0,sizeof(dp));
49 dp[0][0]=1.0;
50 for(int i=1;i<=n;i++)
51 {
52 for(int j=0;j*pj<=pi*i;j++)//保证j/i<=pi/pj,这是一种技巧
53 {
54 dp[i][j]=dp[i-1][j]*(1-p);
55 if(j-1>=0) dp[i][j]+=dp[i-1][j-1]*p;
56 }
57 }
58 double pAns=0;
59 for(int j=0;j*pj<=pi*n;j++) pAns+=dp[n][j];
60 printf("Case #%d: %d\n",cas,(int)(1/pAns));
61
62 }
63 return 0;
64 }