一个n行m列的棋盘,每次能够放一个棋子。问要使得棋盘的每行每列都至少有一个棋子 须要的放棋子次数的期望。

dp[i][j][k]表示用了k个棋子共能占据棋盘的i行j列的概率。

那么对于每一颗棋子,在现有的棋盘上,它可能有四种影响:新占了一行,新占了一列,既占了新的一行又占了新的一列。无影响。

对于每一种情况。dp[i][j][k]=原始状态的概率×选到这种位置的概率

最后算答案的时候注意到,题目问的是到第k个刚好放完n行m列。也就是最后一个棋子一定是有作用的,

所以用dp[i][j][k]-dp[i][j][k-1]得到是第k个棋子恰好使得每行每列都占据的概率。

#include<cstdio>
#include<cstring>
double dp[55][55][2550];
int n,m;
int main()
{
int T,i,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
int sum=n*m;
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
for(k=0;k<=sum;k++) dp[i][j][k]=0;
dp[0][0][0]=1.0;
for(k=1;k<=sum;k++)
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
dp[i][j][k]+=(dp[i][j][k-1]*(i*j-k+1)*1.0/(sum-k+1));//加入的位置没有新增新行或新列
dp[i][j][k]+=(dp[i-1][j][k-1]*((n-i+1)*j)*1.0/(sum-k+1));//添加行不添加列
dp[i][j][k]+=(dp[i][j-1][k-1]*(m-j+1)*i*1.0/(sum-k+1));//添加列不添加行
dp[i][j][k]+=(dp[i-1][j-1][k-1]*(n-i+1)*(m-j+1)*1.0/(sum-k+1));//既添加列也添加行
// printf("i:%d j;%d k;%d dp:%lf\n",i,j,k,dp[i][j][k]);
}
double ans=0;
for(k=1;k<=sum;k++) ans+=(dp[n][m][k]-dp[n][m][k-1])*k;
printf("%.10lf\n",ans);
}
return 0;
}

zoj3822 Domination 概率dp --- 2014 ACM-ICPC Asia Mudanjiang Regional Contest的更多相关文章

  1. HDU 5000 2014 ACM/ICPC Asia Regional Anshan Online DP

    Clone Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other) Total Submiss ...

  2. hdu 5016 点分治(2014 ACM/ICPC Asia Regional Xi'an Online)

    Mart Master II Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  3. The 2014 ACM-ICPC Asia Mudanjiang Regional Contest(2014牡丹江区域赛)

    The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 题目链接 没去现场.做的网络同步赛.感觉还能够,搞了6题 A:这是签到题,对于A堆除掉.假设没剩余 ...

  4. The 2014 ACM-ICPC Asia Mudanjiang Regional Contest

    The 2014 ACM-ICPC Asia Mudanjiang Regional Contest A.Average Score B.Building Fire Stations C.Card G ...

  5. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  6. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  7. zoj 3822 Domination 概率dp 2014牡丹江站D题

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  8. HDU 5000 Clone(离散数学+DP)(2014 ACM/ICPC Asia Regional Anshan Online)

    Problem Description After eating food from Chernobyl, DRD got a super power: he could clone himself ...

  9. 2014 ACM/ICPC Asia Regional Shanghai Online

    Tree http://acm.hdu.edu.cn/showproblem.php?pid=5044 树链剖分,区间更新的时候要用on的左++右--的标记方法,要手动扩栈,用c++交,综合以上的条件 ...

随机推荐

  1. Java 中静态变量和实例变量区别

    Java 中静态变量和实例变量区别 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量. 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量. 在程序运行时的区别: 实例变量属于某个对 ...

  2. 使用DOM解析XML文档

    简单介绍一下使用DOM解析XML文档,解析XML文件案例: <?xml version="1.0" encoding="UTF-8"?> -< ...

  3. jQuery顺序加载图片(初版)

    浏览器加载图片区别: IE:同时加载与渲染 其他:加载完之后再渲染 根据这个差异用jQuery做个实例:按顺序加载一组图片,加载完成后提示. <!DOCTYPE html> <htm ...

  4. 多开 MFC线程

    序言:我才编程几年啊!就要处理多线程.对于只写函数的我,这难度简直了!不过MFC的多线程,貌似比较简单,还能处理的了. (1).开MFC多个线程 在视频采集的过程中,如果不使用媒体计数器,会造成主线程 ...

  5. MFC 缩放和显示IplImage

    序言:使用OpenCV嵌入MFC的框内,图像大小不能和框大小进行匹配,因此需要缩放,使图像适用于MFC框. 后来找到了一种新的方法,此方案貌似u已经废弃. (1).在MFC中显示图片 void CAv ...

  6. 虚拟机+linux+大杂烩

    出于项目需要,需要用到linux系统.这玩意儿平时很少用,要说体验度还是windows更人性化一些. 1.虚拟机的安装,这个没说的,百度VMware直接下最新版安装就好. 2.接着是linux系统的安 ...

  7. HTTP协议探索之Cache-Control

    缓存的存与用的控制 Cache-Control指定了请求和响应遵循的缓存机制.好的缓存机制可以减少对网络带宽的占用,可以提高访问速度,提高用户的体验,还可以减轻服务器的负担. Cache-Contro ...

  8. BZOJ 2959: 长跑 LCT_并查集_点双

    真tm恶心...... Code: #include<bits/stdc++.h> #define maxn 1000000 using namespace std; void setIO ...

  9. eas之网络互斥功能示手工控制

    public void doMutexService()    {        IMutexServiceControl mutex = MutexServiceControlFactory.get ...

  10. Java 8 集合不完全一览

    JDK 8 List 名称 线程安全 数据结构 允许 null 默认初始容量 扩容策略 备注 ArrayList 不安全 数组 允许 10 1.5 * old LinkedList 不安全 双链表 允 ...