zoukankan      html  css  js  c++  java
  • poj 2151 Check the difficulty of problems 夜

    http://poj.org/problem?id=2151

    dp不是问题 问题在于这是道数学题 亲人呀 最恨数学题

    尤其是和概率有关 代码很乱呀 有木有

    #include<iostream>
    #include<string>
    #include<string.h>
    #include<queue>
    #include<math.h>
    #include<stdio.h>
    #include<map>

    using namespace std;
    double probability[1005][35];
    double a[35][35];
    double dp(int i,int j,int l)
    {
        if(a[i][j]>=0.0)
        {
            return a[i][j];
        }
        if(j==0)
        {
            if(i==1)
            a[i][j]=(1-probability[l][i]);
            else
            a[i][j]=(1-probability[l][i])*dp(i-1,0,l);
            return a[i][j];
        }
        if(j==1&&i==1)
        {
           a[i][j]=probability[l][i];
           return a[i][j];
        }
        if(i<j)
        {
            a[i][j]=0.0;
            return a[i][j];
        }
        if(i==j)
        {
            a[i][j]=probability[l][i]*dp(i-1,j-1,l);
            return a[i][j];
        }
        if(i>j)
        {
            a[i][j]=probability[l][i]*dp(i-1,j-1,l);
            a[i][j]=a[i][j]+dp(i-1,j,l)*(1-probability[l][i]);
            return a[i][j];
        }

    }
    int main()
    {

        int m,t,n;
        while(scanf("%d %d %d",&m,&t,&n)!=EOF)
        {
            if(m==0&&t==0&&n==0)
            break;
            double w,anstemp=1.0;
            for(int i=1;i<=t;++i)
            {
                w=1.0;
                for(int j=1;j<=m;++j)
                {
                    scanf("%lf",&probability[i][j]);
                    w=w*(1.0-probability[i][j]);
                }
                anstemp=anstemp*(1.0-w);
            }
            double ans=1.0;
            for(int l=1;l<=t;++l)
            {
                for(int i=0;i<=m;++i)
                {
                    for(int j=0;j<=m;++j)
                    {
                        a[i][j]=-1.0;
                    }
                }
                w=0.0;
                int i;
                for(i=1;i<n;++i)
                {
                    w=w+dp(m,i,l);
                }

                ans=ans*(w);
            }
            printf("%.3f\n",anstemp-ans);

        }
        return 0;
    }

  • 相关阅读:
    聚类k-means算法详解
    将pip源更换到国内镜像
    python和nltk自然语言处理
    《python自然语言处理》第三章 加工原料文本
    装载问题(最优装载问题变形)-回溯法-深度搜索
    5-2 工作分配问题 (30分)
    5-4 最小重量机器设计问题 (20分)
    7-6 部落卫队问题 (20分)
    7-5 最佳调度问题 (30分)
    原码,补码和反码(转载)
  • 原文地址:https://www.cnblogs.com/liulangye/p/2459844.html
Copyright © 2011-2022 走看看