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 <= N, M <= 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
题意:
给出 T 组样例,每组样例有 N,M 两个数,代表 N 行 M 列。每次往棋盘放一只棋子,每个棋子可以覆盖所在行与列,输出放多少个棋子能覆盖整个棋盘的数学期望。
思路:
概率 DP。dp [ i ] [ j ] [ k ] 代表用 k 只棋子覆盖了 i 行,j 列(任意行,任意列,代表的是有 i 行,有 j 列而不是特指某 i 行,某 j 列)。转移方程的时候注意要分开讨论,因为如果当 i == n && j == m 的时候,如果之前已经是覆盖了的就不需要加上 dp [ i ] [ j ] [ k - 1 ] * (i * j - (k - 1)) / ( n * m - k + 1 ) 的概率了。
AC:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 55; const int MAX = N * N; double dp[N][N][MAX]; int main() { int t; scanf("%d", &t); while (t--) { int n, m; scanf("%d%d", &n, &m); double sum = n * m; memset(dp, 0, sizeof(dp)); dp[0][0][0] = 1.0; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { for (int k = 1; k <= sum; ++k) { double left = sum - (k - 1); double p1 = (i * j - (k - 1)) / left; double p2 = (n - (i - 1)) * j / left; double p3 = (m - (j - 1)) * i / left; double p4 = (n - (i - 1)) * (m - (j - 1)) / left; if (i == n && j == m) { dp[i][j][k] += dp[i - 1][j][k - 1] * p2; dp[i][j][k] += dp[i][j - 1][k - 1] * p3; dp[i][j][k] += dp[i - 1][j - 1][k - 1] * p4; } else { dp[i][j][k] += dp[i][j][k - 1] * p1; dp[i][j][k] += dp[i - 1][j][k - 1] * p2; dp[i][j][k] += dp[i][j - 1][k - 1] * p3; dp[i][j][k] += dp[i - 1][j - 1][k - 1] * p4; } } } } double res = 0; for (int i = 0; i <= sum; ++i) { res += dp[n][m][i] * i; } printf("%.12lf\n", res); } return 0; }
相关推荐
"non_domination_sort_mod_MOD"是一个关键的程序模块,它实现了非支配排序算法的改进版本——MOD(Modified Non-Domination Sorting)。MOD算法是对原始非支配排序算法的优化,旨在提高计算效率和解决大规模多目标...
基于java的开发源码-lobby(经典board游戏 Domination).zip 基于java的开发源码-lobby(经典board游戏 Domination).zip 基于java的开发源码-lobby(经典board游戏 Domination).zip 基于java的开发源码-lobby(经典board...
对于经典Board游戏如Domination来说,采用Java进行开发具有诸多优势,比如跨平台性、丰富的类库支持等。 #### 1.2 经典Board游戏Domination Domination是一款经典的策略类Board游戏,玩家通过占领地图上的领土来...
《lobby(经典board游戏 Domination)》是一款深受玩家喜爱的桌面策略游戏,它融合了战争、外交、资源管理和策略规划等多种元素,旨在提供一个高度互动和竞争激烈的竞技环境。在这个游戏中,玩家扮演不同国家的统治者...
《基于Java的Lobby:探索经典Board游戏Domination的实现》 在计算机编程的世界中,Java作为一种广泛应用的编程语言,以其跨平台、面向对象和强大的性能特性,深受开发者喜爱。当我们谈论“基于Java的lobby(经典...
《基于Java的Lobby:构建经典board游戏Domination》 在信息技术领域,Java作为一种多平台、面向对象的编程语言,广泛应用于各种系统开发,包括游戏开发。本项目“基于Java的Lobby(经典board游戏Domination)”便是...
将任务文件夹co30_Domination.Altis复制到本地mpmission目录中 将任务加载到Eden编辑器中,然后单击“播放” ->“多人游戏” ->“确定”以运行您的本地代码 编辑任务 统治任务可以在伊甸园编辑器中进行修改。 ...
藏经阁-Evading-MicrosoftATA-for-ActiveDirectory-Domination
"基于Java的源码-lobby(经典board游戏 Domination)" 提供的是开发一个名为“lobby”的游戏的源代码,这款游戏是基于经典的board游戏“Domination”。 【board游戏】 Board游戏是指在二维平面上进行的策略游戏,...
Java源码:Lobby(经典Board游戏Domination)是一个典型的基于Java编程语言开发的桌面游戏项目,它展示了如何使用Java来实现策略类游戏的逻辑。这个项目的核心是为玩家提供一个交互式的平台,让他们可以进行...
WorDoG,全称为World Domination Game,是一款受到经典棋盘游戏《Risk》启发而创建的在线战略多人游戏。这款游戏的独特之处在于它完全基于HTML,这意味着玩家可以在任何支持网页浏览的设备上进行游戏,无需下载额外...
"Global Domination-开源"是一个独特的网络监视应用程序,它的设计理念在于提供一种全新的网络浏览体验,让人联想到Google Maps的功能,但却在虚拟的网络空间中实现“滚动”。这个项目巧妙地融合了Piccolo.net框架与...
《搜索引擎优化学习资料(英文)7 Days To Complete Search Engine Domination》是一份全面的SEO教程,由业内专家Brad Callen倾力打造。这份资源旨在帮助读者在短短七天内掌握搜索引擎优化的核心技巧,从而实现对...
在本项目中,我们关注的是一个基于Java编程语言开发的游戏——"Domination",它是一个经典的board游戏。这个实例展示了如何使用Java来实现一个棋盘类游戏,这为我们提供了深入理解Java编程、游戏逻辑设计以及图形...
统治不和谐机器人DomiNATION Discord Bot是为创建的机器人。 这是我的第一个项目,激发了我对软件开发的兴趣。 自开始以来,我已经注册并完成了代码训练营,成为了Full Stack Java Developer! Java版DomiNATION ...
一种用Java编写的联网的,二维,多平台,多人射击游戏,其中,玩家试图捕获并保持对基地的控制以便获得积分。
《Galaxy Domination》是一款基于浏览器的扩展程序,其核心玩法是太空策略游戏,结合了点击元素和模拟飘扬的风格,为玩家带来独特的宇宙征服体验。这款插件旨在为用户提供一个沉浸式的太空探索和扩张的环境,通过...
标题中的"domination"可能指的是一个项目或者框架的名称,但具体的含义没有给出明确的上下文。描述中提到的“统治”可能是指该技术在某个领域具有显著优势或控制力,而“包含此,那个和/或其他内容”则暗示这个项目...
来自 Brad Callen 的搜索引擎优化专业指导
lobby(经典board游戏 Domination)源码