UVA11021 Tribles

UVA11021 Tribles

Solution

说是全概率公式推导出来个

大体理解下, 首先假设 f[i - 1] 已知嘛
那他可以从多少种情况转移过来咧

一共不是死一只、两只。。。n - 1只嘛
所以它其实是用第一个状态推过来的, 第一个生一只, 死完的概率是 f[i - 1]
两只是 f[i - 1] ^ 2
就这么推出来了

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#define LL long long
#define REP(i, x, y) for(int i = (x);i <= (y);i++)
using namespace std;
int RD(){
    int out = 0,flag = 1;char c = getchar();
    while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
    while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
    return flag * out;
    }
const int maxn = 1010;
int T, num, k, m, Tony;
double p[maxn];
double dp[maxn];
void init(){
	num = RD(), k = RD(), m = RD();
	REP(i, 0, num - 1)cin>>p[i];
	dp[1] = p[0];
	}
void work(){
	REP(i, 2, m){
		double res = 1;
		dp[i] = 0;
		REP(j, 0, num - 1){
			dp[i] += res * p[j];
			res *= dp[i - 1];
			}
		}
	printf("Case #%d: %.7f\n", ++Tony, pow(dp[m], k));
	}
int main(){
	T = RD();
	while(T--){
		init();
		work();
		}
	return 0;
	}
posted @ 2021-03-30 23:01  Tony_Double_Sky  阅读(34)  评论(0编辑  收藏  举报