ZOJ3822 ACM-ICPC 2014 亚洲杯赛事现场牡丹江司D称号Domination 可能性DP

时间:2022-09-13 23:35:49

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

2
1 3
2 2

Sample Output

3.000000000000
2.666666666667

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

2、取未控制的i行,已控制的j列的格子

dp[i+1][j][k+1]+=dp[i][j][k]*(n-i)*j/(n*m-k);

3、取已控制的i行和未控制的j列的格子

dp[i][j+1][k+1]+=dp[i][j][k]*(m-j)*i/(n*m-k);

4、取未控制的i行j列的格子

dp[i+1][j+1][k+1]+=dp[i][j][k]*(n-i)*(m-j)/(n*m-k);

从而终于求出控制n行m列须要步数的概率,由期望的定义式EX=n1p1+n2p2+...就可以求出终于期望,详细程序例如以下:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
double dp[55][55][55*55],a[55][55];
const double eps=1e-8;
int maxx(int a,int b)
{
if(a>b)return a;
return b;
}
int main()
{
// freopen("in.txt","r",stdin);
int t;
cin>>t;
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
memset(a,0,sizeof(a));
dp[1][1][1]=1;
a[1][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=a[i][j];k++)
{
if(i==n&&j==m)
break;
dp[i][j][k+1]+=dp[i][j][k]*(i*j-k)/(n*m-k);
if(i*j>k)
a[i][j]=maxx(a[i][j],k+1);
}
for(int k=1;k<=a[i][j];k++)
{
dp[i+1][j][k+1]+=dp[i][j][k]*(n-i)*j/(n*m-k);
a[i+1][j]=maxx(a[i+1][j],k+1);
dp[i][j+1][k+1]+=dp[i][j][k]*(m-j)*i/(n*m-k);
a[i][j+1]=maxx(a[i][j+1],k+1);
dp[i+1][j+1][k+1]+=dp[i][j][k]*(n-i)*(m-j)/(n*m-k);
a[i+1][j+1]=maxx(a[i+1][j+1],k+1);
}
}
}
double sum=0;
for(int i=1;i<=a[n][m];i++)
sum+=dp[n][m][i]*i;
printf("%.12f\n",sum);
}
return 0;
}


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

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&sol;ICPC亚洲区青岛站现场赛(部分题解)

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

  3. ZOJ 3820 2014ACM&sol;ICPC牡丹江司B称号

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

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

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

  5. hdu 5016 点分治&lpar;2014 ACM&sol;ICPC Asia Regional Xi&&num;39&semi;an Online&rpar;

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

  6. 训练报告 &lpar;2014-2015&rpar; 2014&comma; 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&sol;ICPC Asia Regional Anshan Online DP

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

  8. 【转】lonekight&commat;xmu&&num;183&semi;ACM&sol;ICPC 回忆录

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

  9. 2013ACM&sol;ICPC亚洲区南京站现场赛---Poor Warehouse Keeper&lpar;贪心&rpar;

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

随机推荐

  1. hiho &num;1329 &colon; 平衡树&&num;183&semi;Splay

    #1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...

  2. python文件&lowbar;目录

    #! /usr/bin/env python #coding=gbk import os import time #设置文件的默认路径,当指定的目录不存在时,引发异常:WindowsError:[er ...

  3. 熬之滴水穿石&colon;Spring--精简的J2EE&lpar;5&rpar;

                                   47--Spring的MVC 在Spring的框架中也存在MVC这样的模式,在Spring下有2个这样的控制器一个叫Controller, ...

  4. Json&period;NET Performance Tips

    原文: http://www.newtonsoft.com/json/help/html/Performance.htm To keep an application consistently fas ...

  5. MHA环境搭建

    准备工作 数据库架构 角色 ip地址 主机名 server_id Master Slave1 Slave2 配置三台服务器ssh免秘钥认证 ssh-keygen -t rsa ssh-copy-id ...

  6. APDL link180单元

    目录 APDL代码实现link180单元的使用 结果图片 APDL代码实现link180单元的使用 由于不知道怎样使用LINK180单元,故按照相关的教程和理解,整理了一下比较完整的APDL的代码.其 ...

  7. Winfrom窗体无法关闭问题--检查是否存在重写

    问题描述: Winfrom窗体无法关闭问题----点击关闭/最大/最小化无法正常相应. 问题来源: 老版本的程序要求使用无边框的Form窗体(实现功能——设置为无边框窗体并重写窗体的关闭.最大.最小化 ...

  8. 通过html文件生成PDF文件

    /// <summary> /// 获取html内容,转成PDF(注册) /// </summary> public void DownloadPDFByHTML(string ...

  9. S 配置邮箱

  10. Hadoop编码解码【压缩解压缩】机制具体解释(1)

    想想一下,当你须要处理500TB的数据的时候,你最先要做的是存储下来. 你是选择源文件存储呢?还是处理压缩再存储?非常显然,压缩编码处理是必须的.一段刚刚捕获的60分钟原始视屏可能达到2G,经过压缩处 ...