题目链接: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 }
时间: 2024-10-06 23:24:09