题目描述

  给你一个\(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相关推荐

  1. 插头DP 概率DP / 期望DP

    插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...

  2. 关于概率dp的个人理解与总结

    原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...

  3. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  4. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  5. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  6. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  7. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  8. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...

  9. HDU - 4035 Maze(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...

最新文章

  1. WEB前端开发的思考与感悟
  2. 《AngularJS实战》——3.1 模板中的过滤器
  3. mysql 线程内存 回收_MySQL内存使用-线程独享
  4. java的collection集合
  5. 《老子》第八十一章 信言不美,美言不信
  6. Hyperledger Fabric 智能合约实战 (5) sdk node软件安装
  7. PolarDB-X 2.0 全局 Binlog 和备份恢复能力解读
  8. Python和单元测试那些事儿
  9. EL表达式取 Map、 List和数组的值
  10. 如何设计一个高并发系统
  11. Sublime Text for Mac的快捷键
  12. Python字典(Dictionary)的setdefault()方法的详解,字典中的赋值技巧
  13. ”*“在正则表达式和通配符的应用
  14. 对于李群和李代数的理解
  15. Linux下解决高并发socket最大连接数限制,tcp默认1024个连接
  16. java数据库查询类
  17. 蓝桥杯 错误票据——2013年省赛C/C++ A组
  18. 汽车车架号识别 VIN码识别,在汽车后市场的应用
  19. 泊松分布(Poisson Distribution)
  20. gantt(甘特)图

热门文章

  1. python安装多少位_python安装流程
  2. ekf pose使用方法 ros_robot_pose_ekf 使用说明
  3. PAT_B_1025_Java(22分)
  4. Android 仿王者荣耀广告弹窗,android仿王者荣耀对战资料之能力图
  5. 软件工程--第二章--可行性分析
  6. USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))
  7. ADAS视觉方案盘点下篇:11家创业公司完全解读
  8. HTML5实践 -- 三步实现响应式设计
  9. Cocos2dx开发之锚点
  10. 大数据数据量估算_如何估算数据科学项目的数据收集成本