• [poj2151]Check the difficulty of problems概率dp


    解题关键:主要就是概率的推导以及至少的转化,至少的转化是需要有前提条件的。

    转移方程:$dp[i][j][k] = dp[i][j - 1][k - 1]*p + dp[i][j - 1][k]*(1 - p)$ 其中$dp[i][j][k]$表示第$i$个人前j题恰好ac了$k$题.然后用前缀和处理一下最后的结果。

    每队至少AC一题 反向考虑,用1-每队没A题的概率,再用乘法原理结合一下。

    冠军队至少AC$n-1$题,也就是存在一支队伍AC数>=n-1,依然反向考虑,不过是在每队AC至少一题的条件下,从而求出每队AC数>=1,<n-1,再用前面的概率减去此概率即可。

    复杂度:1000*30*30

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<iostream>
     7 using namespace std;
     8 typedef long long ll;
     9 double p[1002][32],dp[1002][32][32],s[1002][32];
    10 int main(){
    11     int m,t,n;
    12     ios::sync_with_stdio(0);
    13     while(cin>>m>>t>>n&&(n||m||t)){
    14         for(int i=1;i<=t;i++){
    15             for(int j=1;j<=m;j++){
    16                 cin>>p[i][j];
    17             }
    18         }
    19         
    20         for(int i=1;i<=t;i++){
    21             dp[i][0][0]=1;
    22             for(int j=1;j<=m;j++){
    23                 dp[i][j][0]=dp[i][j-1][0]*(1-p[i][j]);//类似杨辉三角的推法,注意按照怎样的顺序才能推出全部 
    24             }
    25         }
    26         
    27         for(int i=1;i<=t;i++){
    28             for(int j=1;j<=m;j++){
    29                 for(int k=1;k<=j;k++){//注意控制变量范围,保证有意义 
    30                     dp[i][j][k]=dp[i][j-1][k-1]*p[i][j]+dp[i][j-1][k]*(1-p[i][j]);
    31                 }
    32             }
    33         }
    34         for(int i=1;i<=t;i++){
    35             for(int j=0;j<=m;j++){
    36                 s[i][j]=s[i][j-1]+dp[i][m][j];
    37             }
    38         }
    39         
    40         double ans1=1.0,ans2=1.0,t1;
    41         for(int i=1;i<=t;i++)    t1=1-s[i][0],ans1*=t1;
    42         for(int i=1;i<=t;i++)    t1=s[i][n-1]-s[i][0],ans2*=t1;
    43         printf("%.3f
    ",ans1-ans2);
    44 
    45         
    46         
    47     }
    48 }
  • 相关阅读:
    继续致歉
    向大家致歉!!
    访问速度调查
    致歉
    [功能改进]通过Blog客户端直接发随笔至网站分类
    带宽升级公告
    创业团队的类型
    [讨论]基于.NET的开源论坛软件的选择
    调整一下工作的节奏
    公告
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7451010.html
Copyright © 2020-2023  润新知