zoukankan      html  css  js  c++  java
  • 【UVa11021】Tribles

    题目描述

    输入

    输出

    样例输入

    4
    3 1 1
    0.33
    0.34
    0.33
    3 1 2
    0.33
    0.34
    0.33
    3 1 2
    0.5
    0.0
    0.5
    4 2 2
    0.5
    0.0
    0.0
    0.5

    样例输出

    Case #1: 0.3300000

    Case #2: 0.4781370

    Case #3: 0.6250000

    Case #4: 0.3164062



    题解

    概率dp。设dp[ i ] 表示开始有一个麻球,第 i 天全部死亡的概率。考虑dp[ i+1 ],枚举第一天生出麻球的个数 j ,那么 dp[ i+1 ] = ( dp[ i ] ) j。转移方程:

                                                           dp[ i ] = Σ p[ j ] * dp[ i-1 ]j

    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define ll long long
    
    const int maxn=1000+50;
    
    int T,k,m,n,tmp;
    double dp[maxn],p[maxn];
    
    template<typename T>void read(T& aa){
        char cc; ll ff;aa=0;cc=getchar();ff=1;
        while((cc<'0'||cc>'9')&&cc!='-') cc=getchar();
        if(cc=='-') ff=-1,cc=getchar();
        while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
        aa*=ff;
    }
    
    int main(){
        read(T);
        while(T--){
            memset(dp,0,sizeof(dp));
            read(n),read(k),read(m);
            for(int i=0;i<n;i++) scanf("%lf",&p[i]);
            dp[1]=p[0];
            for(int i=2;i<=m;i++)
            for(int j=0;j<n;j++){
                dp[i]+=p[j]*pow(dp[i-1],j);
            }
            printf("Case #%d: %.7lf
    ",++tmp,pow(dp[m],k));
        }
        return 0;
    }
  • 相关阅读:
    第四周作业
    第三周作业
    第二周基础作业
    抓老鼠
    币值转换
    打印沙漏
    秋季学期学习总结
    2019春第七周作业
    2019春第六周作业 学习总结
    第五周作业总结以及学习总结
  • 原文地址:https://www.cnblogs.com/rlddd/p/9588034.html
Copyright © 2011-2022 走看看