• zoj 3822 概率dp


     1 /*
     2 题目大意:一个n*m的棋盘,每天放一个棋子,每行每列至少有一个棋子时结束。求达到每行每列至少有一个棋子的天数的数学期望。
     3 */
     4 #include <iostream>
     5 #include <cstdio>
     6 #include <cstring>
     7 using namespace std;
     8 
     9 const int maxn=55;
    10 double dp[maxn*maxn][maxn][maxn];//放i颗棋子,j行有棋子,k列有棋子
    11 
    12 int main()
    13 {
    14     int t,n,m,i,j,k;
    15     scanf("%d",&t);
    16     while(t--)
    17     {
    18         scanf("%d%d",&n,&m);
    19         memset(dp,0,sizeof(dp));
    20         dp[0][0][0]=1;
    21         int top=n*m;
    22         for(i=1;i<=top;i++)
    23         {
    24             for(j=1;j<=i && j<=n;j++)
    25             {
    26                 for(k=1;k<=i && k<=m;k++)
    27                 {
    28                     dp[i][j][k]=dp[i-1][j][k-1]*((m-k+1)*j)/(n*m-i+1)+//原有行,新的列中
    29                                 dp[i-1][j-1][k]*((n-j+1)*k)/(n*m-i+1)+//原有列,新的行中
    30                                 dp[i-1][j-1][k-1]*((n-j+1)*(m-k+1))/(n*m-i+1);//新的行,新的列中
    31                     if(!(n==j && m==k))//没到终点可以放在原有行,原有列中
    32                         dp[i][j][k]+=dp[i-1][j][k]*(j*k-i+1)/(n*m-i+1);
    33                 }
    34             }
    35         }
    36         double ans=0;
    37         for(i=1;i<=top;i++)
    38             ans+=dp[i][n][m]*i;
    39         printf("%.10lf
    ",ans);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    Linux下安装FTP服务(Ubuntu)
    Ubuntu下无法使用Secure_CRT连接服务器
    Mysql 锁机制
    PHP提取HTML代码中img标签下src属性
    Mysql 隐式转换
    PHPExcel在TP下使用
    ThinkPHP同时操作多个数据库
    PHP 时间相关操作
    ThinkPHP输入验证和I方法使用
    ThinkPHP模板内使用U方法
  • 原文地址:https://www.cnblogs.com/xiong-/p/4129426.html
Copyright © 2020-2023  润新知