Uva 11021 Tribles
2014-09-03 17:19
211 查看
f[i]表示1只麻球及他的子孙在i天后全部死亡的概率。
那么可以得到递推式: f[i] = P0+P1*f[i-1]+P2*f[i-1]^2+…… 也就是说生出j只的概率并且这j只及其子孙在i-1天后死亡的概率的乘积。
因为每只麻球的死亡时相互独立的,所以算出一只麻球的f[m]后k只麻球的死亡概率就是 f[m]^k。
#include <iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
using namespace std;
double f[1100],p[1100];
int main()
{
int t;
int n,k,m;
scanf("%d",&t);
int cas = 1;
while(t--)
{
scanf("%d %d %d",&n,&k,&m);
for(int i = 0;i < n;i++) scanf("%lf",&p[i]);
f[0] = 0,f[1]=p[0];
for(int i = 2;i <= m;i++)
{
f[i] = 0;
for(int j = 0;j < n;j++) f[i]+=p[j]*pow(f[i-1],j);
}
double ans = pow(f[m],k);
printf("Case #%d: %.7lf\n",cas++,ans);
}
return 0;
}
那么可以得到递推式: f[i] = P0+P1*f[i-1]+P2*f[i-1]^2+…… 也就是说生出j只的概率并且这j只及其子孙在i-1天后死亡的概率的乘积。
因为每只麻球的死亡时相互独立的,所以算出一只麻球的f[m]后k只麻球的死亡概率就是 f[m]^k。
#include <iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
using namespace std;
double f[1100],p[1100];
int main()
{
int t;
int n,k,m;
scanf("%d",&t);
int cas = 1;
while(t--)
{
scanf("%d %d %d",&n,&k,&m);
for(int i = 0;i < n;i++) scanf("%lf",&p[i]);
f[0] = 0,f[1]=p[0];
for(int i = 2;i <= m;i++)
{
f[i] = 0;
for(int j = 0;j < n;j++) f[i]+=p[j]*pow(f[i-1],j);
}
double ans = pow(f[m],k);
printf("Case #%d: %.7lf\n",cas++,ans);
}
return 0;
}
相关文章推荐
- UVA 11021 - Tribles(概率递推)
- UVA 11021 Tribles(递推+概率)
- UVA-11021 - Tribles(概率期望)
- uva 11021 Tribles 【概率】
- UVA 11021 C - Tribles(概率DP)
- UVA 11021 - Tribles (数学概率)
- UVA_11021 Tribles(递推)
- Uva 11021-Tribles(概率+递推)
- UVA 11021 - Tribles (数学概率)
- UVA 11021 - Tribles
- UVA 11021 - Tribles(概率)
- UVA 11021 - Tribles
- UVa 11021 - Tribles (概率DP)
- UVA - 11021 - Tribles 递推概率
- UVa 11021 - Tribles
- UVA - 11021 Tribles (递推+概率)
- uva 11021 Tribles
- uva 11021 Tribles
- UVA11021 Tribles[离散概率 DP]
- 概率dp - UVA 11021 Tribles