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 分类:有源有汇 ...
随机推荐
- bzoj1010: [HNOI2008]玩具装箱toy(DP+斜率优化)
1010: [HNOI2008]玩具装箱toy 题目:传送门 题解: 很明显的一题动态规划... f[i]表示1~i的最小花费 那么方程也是显而易见的:f[i]=min(f[j]+(sum[i]-su ...
- OWIN是Open Web Server Interface for .NET
http://owin.org/ Servers and Hosts Katana Nowin Suave Frameworks Jasper Nancy SignalR WebApi WebShar ...
- String build-in function - len
len is a build-in function that returns the numbers of characters in a string: Since we started coun ...
- B-Boxes
http://agc010.contest.atcoder.jp/tasks/agc010_b Problem Statement There are N boxes arranged in a ci ...
- 使用sysbench 对mysql进行性能测试
使用sysbench 对mysql进行性能测试 sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有My ...
- php动态导出数据成Excel表格
一.封装 Excel 导出类 include/components/ExecExcel.php <?php /*** * @Excel 导入导出类. */ class ExecExcel { / ...
- docker操作大全
docker 常用操作方法 查看docker版本docker version 搜索镜像docker serach 镜像名称 拉去镜像docker pull 镜像名称 查看本地镜像仓库信息docker ...
- 有关于OpenGL、OpenGL ES、WebGL的小结
转自原文 有关于OpenGL.OpenGL ES.WebGL的小结 一. OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的编程接口 ...
- Android笔记---Intent实现Activity跳转
学了之前的Android控件以及布局,我们就能够做一些UI的设计了,这里我结合之前的知识.以一个小的登录项目来解说下Activity之间跳转. 先看下效果图: 1.登录界面: 2.点击登录按钮跳转到另 ...
- C++模板中重要的术语