点击这里查看原题
f[i]表示一只毛球及其后代在前i天全死掉的概率,则f[i]=p[0]+p[1] * f[i-1]+p[2] * f[i-1]^2+p[3] * f[i-1]^3+……
因为各个毛球间的生存概率相互独立,所以答案为f[m]^k。
/*
User:Small
Language:C++
Problem No.:11021
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
double f[1005],p[1005];
int n,k,m;
void solve(){
cin>>n>>k>>m;
for(int i=0;i<n;i++) cin>>p[i];
f[1]=p[0];
for(int i=2;i<=m;i++){
f[i]=p[0];
double tmp=1;
for(int j=1;j<=n;j++){
tmp*=f[i-1];
f[i]+=p[j]*tmp;
}
}
cout<<setiosflags(ios::fixed)<<setprecision(10)<<pow(f[m],k)<<endl;
}
int main(){
freopen("data.in","r",stdin);//
ios::sync_with_stdio(false);
int t;
cin>>t;
for(int i=1;i<=t;i++){
cout<<"Case #"<<i<<": ";
solve();
}
return 0;
}