【XSY1594】棋盘控制 概率DP
题目描述
给你一个\(n\times m\)的棋盘,每次随机在棋盘上放一个国际象棋中的车,不能和以前放的重叠。每个车可以控制当前行和当前列。当所有行和所有列都被控制时结束游戏。问你结束时期望放了多少个车。
注意:结束的条件是所有行和所有列都被控制,而不是所有格子都被控制。
\(n,m\leq 50\)
题解
简单DP
\(f_{i,j,k}\)表示放了\(k\)个车后控制了\(i\)行\(j\)列的概率
\[ f_{i,j,k}=\frac{f_{i,j,k-1}\times(ij-(k-1))+f_{i,j-1,k-1}\times i(m-j+1)+f_{i-1,j,k-1}\times j(n-i+1)+f_{i-1,j-1,k-1}\times(n-i+1)(m-j+1)}{nm-k+1} \]
答案是
\[ \sum_{i=1}^{nm}i(f_{n,m,i}-f_{n,m,i-1}) \]
弄个滚动数组搞一下
时间复杂度:\(O(n^4)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
double f[2][60][60];
void solve()
{double ans=0;int n,m;scanf("%d%d",&n,&m);memset(f,0,sizeof f);int i,j,k;f[0][0][0]=1;int t=0;for(k=1;k<=n*m;k++){t^=1;double now=1./(n*m-k+1);memset(f[t],0,sizeof f[t]);for(i=1;i<=n;i++)for(j=1;j<=m;j++)f[t][i][j]=(f[t^1][i][j]*(i*j-k+1)+f[t^1][i-1][j]*(n-i+1)*j+f[t^1][i][j-1]*i*(m-j+1)+f[t^1][i-1][j-1]*(n-i+1)*(m-j+1))*now;ans+=k*(f[t][n][m]-f[t^1][n][m]);}printf("%.10lf\n",ans);
}
int main()
{int t;scanf("%d",&t);while(t--)solve();return 0;
}
转载于:https://www.cnblogs.com/ywwyww/p/8511350.html
【XSY1594】棋盘控制 概率DP相关推荐
- 插头DP 概率DP / 期望DP
插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...
- 关于概率dp的个人理解与总结
原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...
- 2018.09.01 poj3071Football(概率dp+二进制找规律)
传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...
- Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]
题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
- poj 3071 Football(概率dp)
http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...
- HDU - 4035 Maze(概率dp)
题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...
最新文章
- WEB前端开发的思考与感悟
- 《AngularJS实战》——3.1 模板中的过滤器
- mysql 线程内存 回收_MySQL内存使用-线程独享
- java的collection集合
- 《老子》第八十一章 信言不美,美言不信
- Hyperledger Fabric 智能合约实战 (5) sdk node软件安装
- PolarDB-X 2.0 全局 Binlog 和备份恢复能力解读
- Python和单元测试那些事儿
- EL表达式取 Map、 List和数组的值
- 如何设计一个高并发系统
- Sublime Text for Mac的快捷键
- Python字典(Dictionary)的setdefault()方法的详解,字典中的赋值技巧
- ”*“在正则表达式和通配符的应用
- 对于李群和李代数的理解
- Linux下解决高并发socket最大连接数限制,tcp默认1024个连接
- java数据库查询类
- 蓝桥杯 错误票据——2013年省赛C/C++ A组
- 汽车车架号识别 VIN码识别,在汽车后市场的应用
- 泊松分布(Poisson Distribution)
- gantt(甘特)图
热门文章
- python安装多少位_python安装流程
- ekf pose使用方法 ros_robot_pose_ekf 使用说明
- PAT_B_1025_Java(22分)
- Android 仿王者荣耀广告弹窗,android仿王者荣耀对战资料之能力图
- 软件工程--第二章--可行性分析
- USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))
- ADAS视觉方案盘点下篇:11家创业公司完全解读
- HTML5实践 -- 三步实现响应式设计
- Cocos2dx开发之锚点
- 大数据数据量估算_如何估算数据科学项目的数据收集成本