题意:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827369874

给你n*m的棋盘,我们定义放满棋盘是:任意一行一列至少有一个棋子。

问你放满棋盘需要棋子的期望数。

思路:

我们先算出用x个棋子放满棋盘的概率,然后求Sigma就可以了

我们可以转换一下放棋子的方式,在任意一个地方放棋子,我们都可以把这个位置尽可能的移到左上角。

dp【k】【i】【j】是放了k个棋子,已经有 i 行 j 列满了的概率;

注意:放最后一个的时候不需要加放在 i,j区域里的概率(既然都放里面了,那就已经放满了)。

  1. #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
  2. #include <cstdio>//sprintf islower isupper
  3. #include <cstdlib>//malloc exit strcat itoa system("cls")
  4. #include <iostream>//pair
  5. #include <fstream>//freopen("C:\\Users\\13606\\Desktop\\草稿.txt","r",stdin);
  6. #include <bitset>
  7. //#include <map>
  8. //#include<unordered_map>
  9. #include <vector>
  10. #include <stack>
  11. #include <set>
  12. #include <string.h>//strstr substr
  13. #include <string>
  14. #include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
  15. #include <cmath>
  16. #include <deque>
  17. #include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
  18. #include <vector>//emplace_back
  19. //#include <math.h>
  20. //#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
  21. #include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
  22. using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
  23. #define fo(a,b,c) for(register int a=b;a<=c;++a)
  24. #define fr(a,b,c) for(register int a=b;a>=c;--a)
  25. #define mem(a,b) memset(a,b,sizeof(a))
  26. #define pr printf
  27. #define sc scanf
  28. #define ls rt<<1
  29. #define rs rt<<1|1
  30. typedef long long ll;
  31. void swapp(int &a,int &b);
  32. double fabss(double a);
  33. int maxx(int a,int b);
  34. int minn(int a,int b);
  35. int Del_bit_1(int n);
  36. int lowbit(int n);
  37. int abss(int a);
  38. //const long long INF=(1LL<<60);
  39. const double E=2.718281828;
  40. const double PI=acos(-1.0);
  41. const int inf=(<<);
  42. const double ESP=1e-;
  43. const int mod=(int)1e9+;
  44. const int N=(int)1e6+;
  45.  
  46. double dp[][][];
  47.  
  48. int main()
  49. {
  50. // freopen("C:\\Users\\13606\\Desktop\\草稿.txt","r",stdin);
  51. int T;
  52. sc("%d",&T);
  53. while(T--)
  54. {
  55. int n,m;
  56. sc("%d%d",&n,&m);
  57. dp[][][]=1.0;
  58. for(int k=;k<=n*m;++k)
  59. {
  60. for(int i=;i<=n;++i)
  61. {
  62. for(int j=;j<=m;++j)
  63. {
  64. dp[i][j][k]=dp[i-][j][k-]*(n+-i)*j/(n*m+-k)
  65. +dp[i][j-][k-]*(m+-j)*i/(n*m+-k)
  66. +dp[i-][j-][k-]*(n+-i)*(m+-j)/(n*m+-k);
  67. if(i<n||j<m)
  68. dp[i][j][k]+=dp[i][j][k-]*(i*j+-k)/(n*m+-k);
  69. }
  70. }
  71. }
  72. double ans=;
  73. for(int i=;i<=n*m;++i)
  74. ans+=i*dp[n][m][i];
  75. pr("%.10lf\n",ans);
  76. }
  77. return ;
  78. }
  79.  
  80. /**************************************************************************************/
  81.  
  82. int maxx(int a,int b)
  83. {
  84. return a>b?a:b;
  85. }
  86.  
  87. void swapp(int &a,int &b)
  88. {
  89. a^=b^=a^=b;
  90. }
  91.  
  92. int lowbit(int n)
  93. {
  94. return n&(-n);
  95. }
  96.  
  97. int Del_bit_1(int n)
  98. {
  99. return n&(n-);
  100. }
  101.  
  102. int abss(int a)
  103. {
  104. return a>?a:-a;
  105. }
  106.  
  107. double fabss(double a)
  108. {
  109. return a>?a:-a;
  110. }
  111.  
  112. int minn(int a,int b)
  113. {
  114. return a<b?a:b;
  115. }

概率DP(放棋子)Domination的更多相关文章

  1. [概率dp] ZOJ 3822 Domination

    题意: 给N×M的棋盘.每天随机找一个没放过棋子的格子放一个棋子 问使得每一个每列都有棋子的天数期望 思路: dp[i][j][k] 代表放了i个棋子占了j行k列 到达目标状态的期望 然后从 dp[n ...

  2. zoj3822 Domination(概率dp)

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

  3. ZOJ 3822 Domination (三维概率DP)

    E - Domination Time Limit:8000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submi ...

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

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

  5. ZOJ 3822 Domination(概率dp)

    一个n行m列的棋盘,每天可以放一个棋子,问要使得棋盘的每行每列都至少有一个棋子 需要的放棋子天数的期望. dp[i][j][k]表示用了k天棋子共能占领棋盘的i行j列的概率. 他的放置策略是,每放一次 ...

  6. Domination(概率DP)

    Domination 题目链接:https://odzkskevi.qnssl.com/9713ae1d3ff2cc043442f25e9a86814c?v=1531624384 Edward is ...

  7. zoj3822 Domination 概率dp --- 2014 ACM-ICPC Asia Mudanjiang Regional Contest

    一个n行m列的棋盘,每次能够放一个棋子.问要使得棋盘的每行每列都至少有一个棋子 须要的放棋子次数的期望. dp[i][j][k]表示用了k个棋子共能占据棋盘的i行j列的概率. 那么对于每一颗棋子,在现 ...

  8. zoj 3822 Domination (概率dp 天数期望)

    题目链接 参考博客:http://blog.csdn.net/napoleon_acm/article/details/40020297 题意:给定n*m的空棋盘 每一次在上面选择一个空的位置放置一枚 ...

  9. bzoj3294[Cqoi2011]放棋子 dp+组合+容斥

    3294: [Cqoi2011]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 294[Submit][Status] ...

随机推荐

  1. ZAP-Queries【luogu3455】

    题目大意 有不超过\(50000\)个询问,每次询问有多少正整数对\(x\),\(y\),满足\(x\leqslant a\),\(y \leqslant b\),并且\(gcd(x,y)=c\).其 ...

  2. JETSON TK1 ~ 安装Cuda和OpenCV3

    一:安装Cuda6.5 1:下载安装包 Cuda6.5 2.在TK1上安装软件包: cd ~/Downloads sudo dpkg -i cuda-repo-l4t-r21.3-6-5-prod_6 ...

  3. 前端中的 Attribute & Property

    为了在翻译上显示出区别,Attribute一般被翻译为特性,Property被译为属性. 在使用上面,Angular已经表明态度 Template binding works with propert ...

  4. 2018-2019-2 网络对抗技术 20165205 Exp8 Web基础

    2018-2019-2 网络对抗技术 20165205 Exp8 Web基础 1.原理与实践说明 1.1实践内容 Web前段HTML:能正常安装.启停Apache.理解HTML,理解表单,理解GET与 ...

  5. 普通线程类获取service,controller等spring容器类

    package com.zihexin.application.strategy; import org.springframework.beans.BeansException; import or ...

  6. react 路由

    react 提供了实现路由的方式,不过需要我们下载插件 react-router-dom 当我们下载好了插件,然后我们可以通过 import {} from 'react-router-dom' 来引 ...

  7. Mybatis多值传递的方式

    一共有三种方式 1.参数传入Map 2参数使用@params 3.直接使用时用#{0},#{2} 参考网址 :https://www.2cto.com/database/201409/338155.h ...

  8. DP&图论 DAY 1 下午

    DP&图论  DAY 1  下午  区间和序列上的DP 序列上的DP >序列上的dp状态设计最基本的形式 F[i]表示以 i 结尾的最优值或方案数.◦ F[i][k]表示以 i 结尾附加 ...

  9. 2-mybatis-启动

    启动相关的类主要位于session包下. 参照mybatis官方文档,从xml中构建SqlSessionFactory后,可以获取SqlSession,然后使用SqlSession查询数据库得到结果. ...

  10. Oracle 12C 物理Standby 主备切换switchover

    Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...