Domination


Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge


Edward is the headmaster of Marjar University. He is enthusiastic about chess and often plays chess with his friends. What's more, he bought a large decorative chessboard with N rows
and M columns.

Every day after work, Edward will place a chess piece on a random empty cell. A few days later, he found the chessboard was dominated by the chess pieces. That means there is
at least one chess piece in every row. Also, there is at least one chess piece in every column.

"That's interesting!" Edward said. He wants to know the expectation number of days to make an empty chessboard of N × M dominated. Please write a program to help
him.

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

There are only two integers N and M (1 <= NM <= 50).

Output

For each test case, output the expectation number of days.

Any solution with a relative or absolute error of at most 10-8 will be accepted.

Sample Input

  1. 2
  2. 1 3
  3. 2 2

Sample Output

  1. 3.000000000000
  2. 2.666666666667
  1.  
  1. 这道题算是一个概率DP的裸题吧,非常裸的算法,题目意思是告诉你有一个n*m的区域,占据一个格子能够控制这个行和列,求控制全部行列所须要占据格子的期望,直接推导出状态转移方程就可以。对于算概率,我设dp[i][j][k]表示的意思为当我用k步控制了ij列的概率,那么我们能够知道。这时候下一步则有4不状态转移。分别为继续取已控制的ij列的格子,取未控制的i行,已控制的j列的格子,取已控制的i行和未控制的j列的格子,取未控制的ij列的格子四种不同的情况,对于每种情况,状态转移方程例如以下:
  1. 1、继续取已控制的ij列的格子
  1. dp[i][j][k+1]+=dp[i][j][k]*(i*j-k)/(n*m-k);
  2. 2、取未控制的i行,已控制的j列的格子

  3. dp[i+1][j][k+1]+=dp[i][j][k]*(n-i)*j/(n*m-k);
  4. 3、取已控制的i行和未控制的j列的格子

  5. dp[i][j+1][k+1]+=dp[i][j][k]*(m-j)*i/(n*m-k);
  6. 4、取未控制的ij列的格子

  7. dp[i+1][j+1][k+1]+=dp[i][j][k]*(n-i)*(m-j)/(n*m-k);
  8. 从而终于求出控制nm列须要步数的概率,由期望的定义式EX=n1p1+n2p2+...就可以求出终于期望,详细程序例如以下:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<cstdlib>
  6. #include<algorithm>
  7. #include<map>
  8. #include<vector>
  9. #include<queue>
  10. using namespace std;
  11. double dp[55][55][55*55],a[55][55];
  12. const double eps=1e-8;
  13. int maxx(int a,int b)
  14. {
  15.     if(a>b)return a;
  16.     return b;
  17. }
  18. int main()
  19. {
  20.   //  freopen("in.txt","r",stdin);
  21.     int t;
  22.     cin>>t;
  23.     while(t--)
  24.     {
  25.         int n,m;
  26.         scanf("%d%d",&n,&m);
  27.         memset(dp,0,sizeof(dp));
  28.         memset(a,0,sizeof(a));
  29.         dp[1][1][1]=1;
  30.         a[1][1]=1;
  31.         for(int i=1;i<=n;i++)
  32.         {
  33.             for(int j=1;j<=m;j++)
  34.             {
  35.                 for(int k=1;k<=a[i][j];k++)
  36.                 {
  37.                     if(i==n&&j==m)
  38.                         break;
  39.                     dp[i][j][k+1]+=dp[i][j][k]*(i*j-k)/(n*m-k);
  40.                     if(i*j>k)
  41.                         a[i][j]=maxx(a[i][j],k+1);
  42.                 }
  43.                 for(int k=1;k<=a[i][j];k++)
  44.                 {
  45.                     dp[i+1][j][k+1]+=dp[i][j][k]*(n-i)*j/(n*m-k);
  46.                     a[i+1][j]=maxx(a[i+1][j],k+1);
  47.                     dp[i][j+1][k+1]+=dp[i][j][k]*(m-j)*i/(n*m-k);
  48.                     a[i][j+1]=maxx(a[i][j+1],k+1);
  49.                     dp[i+1][j+1][k+1]+=dp[i][j][k]*(n-i)*(m-j)/(n*m-k);
  50.                     a[i+1][j+1]=maxx(a[i+1][j+1],k+1);
  51.                 }
  52.             }
  53.         }
  54.         double sum=0;
  55.         for(int i=1;i<=a[n][m];i++)
  56.             sum+=dp[n][m][i]*i;
  57.         printf("%.12f\n",sum);
  58.     }
  59.     return 0;
  60. }
  1.  

版权声明:本文博客原创文章。博客,未经同意,不得转载。

ZOJ3822 ACM-ICPC 2014 亚洲杯赛事现场牡丹江司D称号Domination 可能性DP的更多相关文章

  1. ZOJ3819 ACM-ICPC 2014 亚洲区域赛的比赛现场牡丹江司A称号 Average Score 注册标题

    Average Score Time Limit: 2 Seconds      Memory Limit: 131072 KB Bob is a freshman in Marjar Univers ...

  2. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  3. ZOJ 3820 2014ACM/ICPC牡丹江司B称号

    3797714 2014 - 10 - 12 21:58 : 19 Accepted 3820 C++ 1350 70240 zz_1215 比較麻烦的一道题吧,開始的时候不停的段异常,后面知道是爆栈 ...

  4. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  5. hdu 5016 点分治(2014 ACM/ICPC Asia Regional Xi'an Online)

    Mart Master II Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. 训练报告 (2014-2015) 2014, Samara SAU ACM ICPC Quarterfinal Qualification Contest

    Solved A Gym 100488A Yet Another Goat in the Garden   B Gym 100488B Impossible to Guess Solved C Gym ...

  7. HDU 5000 2014 ACM/ICPC Asia Regional Anshan Online DP

    Clone Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other) Total Submiss ...

  8. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  9. 2013ACM/ICPC亚洲区南京站现场赛---Poor Warehouse Keeper(贪心)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4803 Problem Description Jenny is a warehouse keeper. ...

随机推荐

  1. 【 D3.js 入门系列 --- 4 】 怎样使用scale(比例)

    本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在上一节中使用了一个非常重要的概念 - scale (这个不知道 ...

  2. ASP.NET Core 1.0 部署 HTTPS

    ASP.NET Core 1.0 部署 HTTPS ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1) 提示 更新时间:2016年01月23日. 在目前介 ...

  3. Akka FSM 源代码分析

    Akka FSM 源代码分析 萧猛 <simonxiao@qq.com> 啰嗦几句 有限状态机本身不是啥新奇东西,在GoF的设计模式一书中就有状态模式, 也给出了实现的建议.各种语言对状态 ...

  4. js实现文字逐个显示

    先把代码摆上了吧: <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtm ...

  5. MySQL InnoDB存储引擎undo redo解析

    本文介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo Log Undo Log 为了实现事务原子,在MySQL数据库InnoDB存储引擎,还使用Undo Log(简称:MVCC ...

  6. WPF技术触屏上的应用系列(一): 3D 图片(照片)墙、柱面墙(凹面墙或者叫远景墙、凸面墙或者叫近景墙)实现

    原文:WPF技术触屏上的应用系列(一): 3D 图片(照片)墙.柱面墙(凹面墙或者叫远景墙.凸面墙或者叫近景墙)实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...

  7. jquery 判断当前上传文件大小限制上传格式 搭配thinkphp实现上传即预览(模拟异步上传)

    在web开发中,最纠结的一项就是文件上传,最近由于项目需要前后摸索了四天在这里分享给大家.如有不足,望指出!! 前台:jquery.easyui.html 后台:thinkphp 主要涉及语言:jqu ...

  8. (ArcGIS API For Silverlight )QueryTask 跨层查询,和监控完整的查询!

    (ArcGIS API For Silverlight )QueryTask 跨层查询,和监控完整的查询!     直接在源代码:     定义全局变量:    int  index=0; /// & ...

  9. 如何js编译的文件dll对于网页电话

    1. 加入一个项目的解决方案:JSControl 2. 在这个项目中加入js文件(JScript1.js) 脚本的内容: function showAlert(){ alert('Today is a ...

  10. RH133读书笔记(11)-Lab 11 System Rescue and Troubleshooting

    Lab 11 System Rescue and Troubleshooting Goal: To build skills in system rescue procedures. Estimate ...