山东济南彤昌机械科技有限公司 山东济南江鹏工贸游有限公司

UVA 11021 Tribles(递推+概率)

 

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33059

 

【思路】

       递推+概率。

       设f[i]表示一只Tribble经过i天之后死绝的概率,则有递推式:

              f[i]=p[0]+p[1]*(f[i-1]^1)+…p[n-1]*(f[i-1]^n-1)

       最后答案为f[m]^k

 

【代码】

 

 1 #include<cstdio>
 2 #include<cstring>
 3 #define FOR(a,b,c) for(int a=(b);a<=(c);a++)
 4 using namespace std;
 5 
 6 const int N = 1000+10;
 7 
 8 double p[N] , f[N];
 9 int n,m,k;
10 
11 double pow(double x,int p) {
12     double ans=1,tmp=x;
13     while(p) {
14         if(p&1) ans*=tmp;
15         tmp*=tmp; p>>=1;
16     }
17     return ans;
18 }
19 
20 int main() {
21     int T,kase=0;
22     scanf("%d",&T);
23     while(T--) {
24         scanf("%d%d%d",&n,&k,&m);
25         FOR(i,0,n-1) scanf("%lf",&p[i]);
26         f[0]=0; f[1]=p[0];
27         FOR(i,2,m) {
28             f[i]=0;
29             FOR(j,0,n-1) f[i]+=p[j]*pow(f[i-1],j);
30         }
31         printf("Case #%d: %.7lf\n",++kase,pow(f[m],k));
32     }
33     return 0;
34 }

 

posted on 2016-01-27 08:23  hahalidaxin  阅读(317)  评论(0编辑  收藏  举报