ZOJ Problem Set - 3822Domination(DP)
ZOJ Problem Set - 3822Domination(DP)
题目大意:
给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子。直到这个棋盘上的每行每列都有至少有一颗棋子。求要用的天数的期望。
解题思路:
先求出不同摆法的棋盘的概率,然后在和天数相乘就是期望。
我们将棋盘划分为四个部分:当中一部分为每行没列都至少有一个棋子。
然后得出状态转移方程:
dp[x][y][k]:表示x行y列已经满足要求,用了k个棋子。
dp[x][y][k + 1] = dp[x][y][k] *(x *y - k)/ (m * n - k);
dp[x][y][k + 1] = dp[x - 1][y][k] * (n - x + 1) * y / (n * m - k);
dp[x][y][k + 1] = dp[x][y - 1][k] * (m - y + 1) *x / (n *m - k);
dp[x][y][k + 1] = dp[x - 1][y - 1][k] *(m - y + 1) *(n - x + 1) / (n * m - k);
dp[0][0][0] = 1;而且dp[n][m][k] -= dp[n][m][k - 1].由于这个时候已经按要求覆盖了整个棋盘。可是再下第k颗棋子的时候,是有前面的k - 1颗棋子的总数来决定的。可是到k - 1的时候事实上就是能够停止的,而之前这个种类已经加过了,所以减掉。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 55;
double dp[maxn][maxn][maxn * maxn];
int main () {
int T;
int n, m;
scanf ("%d", &T);
while (T--) {
dp[0][0][0] = 1;
scanf ("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
for (int k = 0; k < i * j; k++) {
dp[i][j][k + 1] = 0;
dp[i][j][k + 1] += dp[i][j][k] * (i * j - k) / (n * m - k);
//printf ("%.12lf\n", dp[i][j][k + 1]);
if (i)
dp[i][j][k + 1] += dp[i - 1][j][k] * (n - i + 1) * j/ (n * m - k);
if (j)
dp[i][j][k + 1] += dp[i][j - 1][k] * (i * (m - j + 1)) / (n * m - k);
if (i && j)
dp[i][j][k + 1] += dp[i - 1][j - 1][k] * (n - i + 1) * (m - j + 1) / (n * m - k);
}
double ans = max(n, m) * dp[n][m][max(n, m)];
for (int k = max(n, m) + 1; k <= n * m; k++)
ans += k * (dp[n][m][k] - dp[n][m][k - 1]);
printf ("%.12lf\n", ans);
}
return 0;
}ZOJ Problem Set - 3822Domination(DP)的更多相关文章
- ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
称号:ZOJ Problem Set - 2563 Long Dominoes 题意:给出1*3的小矩形.求覆盖m*n的矩阵的最多的不同的方法数? 分析:有一道题目是1 * 2的.比較火.链接:这里 ...
- ZOJ Problem Set - 2297 Survival 【状压dp】
题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和能够添加的血,然后有一个boss,必须把小怪全部都打死之后才干打boss,血量小于0会死 ...
- zoj 3822(概率dp)
ZOJ Problem Set - 3822 Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Ju ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1025解题报告
ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...
- ZOJ Problem Set - 3829Known Notation(贪心)
ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...
- ZOJ Problem Set - 3593 拓展欧几里得 数学
ZOJ Problem Set - 3593 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3593 One Person ...
- ZOJ Problem Set - 3820 Building Fire Stations 【树的直径 + 操作 】
题目:problemId=5374" target="_blank">ZOJ Problem Set - 3820 Building Fire Stations 题 ...
- ZOJ Problem Set - 3229 Shoot the Bullet 【有上下界网络流+流量输出】
题目:problemId=3442" target="_blank">ZOJ Problem Set - 3229 Shoot the Bullet 分类:有源有汇 ...
随机推荐
- vijos - P1732能量採集 (状态转移)
P1732能量採集 Accepted 标签:NOI2010[显示标签] 背景 描写叙述 栋栋有一块长方形的地.他在地上种了一种能量植物,这样的植物能够採集太阳光的能量. 在这些植物採集能量后,栋栋再使 ...
- vs2012碰到生成时报该错误:项目中不存在目标 “XXXXXX”
vs2012碰到生成时报该错误:项目中不存在目标 "XXXXXX" 首先打开project文件,找到 以下信息: <Import Project="$(MSBuil ...
- 迷宫求解_数据结构c语言版
#include <iostream> #include <string> #include <cstdio> #include <cstdlib> # ...
- hdu_3308 区间合并
一两个月没写代码的确是手生的厉害,debug的好艰辛,,不过看到accept时的那种满足感真的就是爽 #include<iostream> #include<cstdio> # ...
- 英语影视台词---四、Sideways
英语影视台词---四.Sideways 一.总结 一句话总结:杯酒人生 Sideways,大致意思是“偏离.倾斜.转向…”.很明显中文译名与英文原名并没有什么关联,<杯酒人生>这个名字,其 ...
- [Codeforces Round #194 (Div. 2)] Secret 解题报告 (数学)
题目链接:http://codeforces.com/problemset/problem/334/C 题目: 题目大意: 给定数字n,要求构建一个数列使得数列的每一个元素的值都是3的次方,数列之和S ...
- jzoj4196 二分图计数 解题报告(容斥原理)
Description
- vue computed自动计算
<!DOCTYPE html> <html> <head> <title>vue</title> <meta charset=&quo ...
- SQL--CLR概述
Visual Studio 2005 支持在 SQL Server 2005 中开发.部署和调试托管代码.有一种新的项目类型(称为 SQL Server 项目),它允许开发人员在 SQL Serve ...
- exsi主机之间使用scp拷贝文件超时问题
exsi主机之间使用scp拷贝文件直接连接不上报错超时: 解决: 防火墙勾选ssh选项