zoukankan      html  css  js  c++  java
  • poj 2151 Check the difficulty of problems 概率dp

    Check the difficulty of problems
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 3617   Accepted: 1580

    Description

    Organizing a programming contest is not an easy job. To avoid making the problems too difficult, the organizer usually expect the contest result satisfy the following two terms: 
    1. All of the teams solve at least one problem. 
    2. The champion (One of those teams that solve the most problems) solves at least a certain number of problems. 

    Now the organizer has studied out the contest problems, and through the result of preliminary contest, the organizer can estimate the probability that a certain team can successfully solve a certain problem. 

    Given the number of contest problems M, the number of teams T, and the number of problems N that the organizer expect the champion solve at least. We also assume that team i solves problem j with the probability Pij (1 <= i <= T, 1<= j <= M). Well, can you calculate the probability that all of the teams solve at least one problem, and at the same time the champion team solves at least N problems? 

    Input

    The input consists of several test cases. The first line of each test case contains three integers M (0 < M <= 30), T (1 < T <= 1000) and N (0 < N <= M). Each of the following T lines contains M floating-point numbers in the range of [0,1]. In these T lines, the j-th number in the i-th line is just Pij. A test case of M = T = N = 0 indicates the end of input, and should not be processed.

    Output

    For each test case, please output the answer in a separate line. The result should be rounded to three digits after the decimal point.

    Sample Input

    2 2 2
    0.9 0.9
    1 0.9
    0 0 0
    

    Sample Output

    0.972
    ------------------------------------------------------

    f[i][j][k]表示第i组队伍做前j道题有k道正确的概率。。。

    显然有 f[i][j][k]=f[i][j-1][k]*(1-p[i][j])+f[i][j-1][k-1]*p[i][j];

    至少有一组做出n道以上的题且每组至少做出1道题的概率等于每组至少做出1题的概率-没有一组做出n道题以上的概率。

    ------------------------------------------------------

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    const int maxn=1111;
    
    int m,t,n;
    
    double p[maxn][44];
    double f[maxn][44][44];
    
    int main()
    {
        while (~scanf("%d%d%d",&m,&t,&n))
        {
            if (m==0&&t==0&&n==0) break;
            memset(f,0,sizeof(f));
            memset(p,0,sizeof(p));
            for (int i=1;i<=t;i++)
            {
                for (int j=1;j<=m;j++)
                {
                    scanf("%lf",&p[i][j]);
                }
            }
            for (int i=1;i<=t;i++)
            {
                f[i][0][0]=1;
                for (int j=1;j<=m;j++)
                {
                    for (int k=0;k<=j;k++)
                    {
                        if (k==0)
                        {
                            f[i][j][k]=f[i][j-1][k]*(1-p[i][j]);
                        }
                        else
                        {
                            f[i][j][k]=f[i][j-1][k]*(1-p[i][j])+f[i][j-1][k-1]*p[i][j];
                        }
                    }
                }
            }
            double ans=1,sum=0,ans2=1;
            for (int i=1;i<=t;i++)
            {
                sum=0;
                for (int j=1;j<=m;j++)
                {
                    sum+=f[i][m][j];
                }
                ans*=sum;
            }
            for (int i=1;i<=t;i++)
            {
                sum=0;
                for (int j=1;j<n;j++)
                {
                    sum+=f[i][m][j];
                }
                ans2*=sum;
            }
            ans-=ans2;
            printf("%0.3lf\n",ans);
        }
        return 0;
    }
    






  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/cyendra/p/3038366.html
Copyright © 2011-2022 走看看