用dp[i]表示:初始1只麻球在第i天后后代全部死亡的概率。那么dp[i]就可以由dp[i-1]递推而来。最终结果就是dp[m]^k。
概率问题要想办法把问题化简,并找到状态转移方程
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#include <cmath>
double dp[1005];
double a[1005];
int N,M,K;
int main(){
int T;
cin>>T;
int kase=1;
while(T--){
scanf("%d%d%d",&N,&K,&M);
for(int i=0;i<N;i++){
scanf("%lf",&a[i]);
}
dp[0]=0;//dp[1]=a[0];
for(int i=1;i<=M;i++){
dp[i]=a[0];
for(int j=1;j<N;j++){
dp[i]+=pow(dp[i-1],j)*a[j];
}
}
double res=pow(dp[M],K);
printf("Case #%d: %.7f\n",kase++,res);
}
return 0;
}