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 分类:有源有汇 ...
随机推荐
- hdoj--1005--Number Sequence(规律题)
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
Customizing plots with style sheets - Matplotlib 1.5.1 documentation 1. 使用和显示其他画布风格 >> import ...
- 什么是SVN(Subversion)? 为什么要用SVN? (2011-09-05 15:09:47) 转载 ▼
转自:http://blog.sina.com.cn/s/blog_54ccd3500100tkvo.html 什么是SVN(Subversion)? 有一个简单但不十分精确比喻: SVN = 版本控 ...
- Where to Store your JWTs – Cookies vs HTML5 Web Storage--转
原文地址:https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage Update 5/12/20 ...
- hive查询不加分区的一个异常
今天下午有同事反馈她提交了了一个SQL后,hive 查询就停止响应了. 我看了下,发现hiveserver确实hug住了.听过查看日志,发现了一个牛逼的SQL, 这个SQL很简单: select a. ...
- python 3.x 学习笔记4(函数)
1.编程方式分:面向对象.面向过程.函数式编程 2.区分面向对象---->类---->class面向过程---->过程---->def函数式编程---->函数----&g ...
- XML与Plist文件转换
由于工作需要,要解析xml,举一个简单的例子,例如地址,如果是plist的话我们会很好的解析,但是如果已知一个xml的话,当然用原生的xml解析也能解析的出来,但是解析xml的话会是根据标签的头来解析 ...
- 由浅入深讲解数据库中Synonym的使用方法
1.Synonym的概念 Synonym(同义词)是SQL Server 2005的新特性.推出已经有几年的时间了.我们可以简单的理解Synonym为其他表的别名.本文中使用Northwind数据库为 ...
- mcustomscrollbar滚动条美化插件
mCustomScrollbar 是个基于 jQuery UI 的自定义滚动条插件,它可以让你灵活的通过 CSS 定义网页的滚动条,并且垂直和水平两个方向的滚动条都可以定义,它通过 Brandon A ...
- ELK安装笔记
1.jdk安装 2.logstash安装使用 #命令方式[root@ELK ELK]# tar xf logstash-5.3.2.tar.gz [root@ELK logstash-5.3.2]# ...