这题说得是给了一个n*m的棋盘,每天在这个棋盘中放置一个棋子,不能放在之前已经摆放过得地方,求最后使得每行每列都有至少一个棋子的期望天数是多少,这样我们考虑怎么放,放哪里,显然数据大而且不知道状态怎么表示, 考虑现在有i行j列放有k个棋子  这样我们要求的概率就是dp[n][m][k],表示n行m列有棋子棋子个数为k

那么 dp[i][j][k] 会从 1扩展行 2扩展列 3 同时扩展行和列,4 行列 都不扩展, 相应的求出其概率

#include<map>
#include<set>
#include<list>
#include<cmath>
#include<ctime>
#include<deque>
#include<stack>
#include<queue>
#include<cstdio>
#include<bitset>
#include<string>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<ctype.h>
#include<complex>
#include<fstream>
#include<iomanip>
#include<numeric>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
typedef long long LL;
const int MOD = 1e9 + ;
const double EPS = 1e-;
const int MAXN = 1e5 + ;
const int INF = 0x7fffffff;
const double PI = acos(-1.0);
typedef unsigned long long uLL; int n, m, ans = -;
double dp[][][ * ];
int main()
{
int cas;
scanf("%d", &cas);
while(cas--){
int n, m;
scanf("%d%d", &n, &m);
memset(dp, , sizeof(dp));
dp[][][] = ;
int cnt = n*m;
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
for(int num = max(i, j); num <= i*j; ++num)
{
dp[i][j][num] += dp[i - ][j][num - ] * (n - i + )*j / (cnt - num + );
dp[i][j][num] += dp[i][j - ][num - ] * (m - j + )*i / (cnt - num + );
dp[i][j][num] += dp[i - ][j - ][num - ] * (cnt - (i - )*m - (j - )*n + (i - )*(j - )) / (cnt - num + );
if(i==n&&j==m) continue;
dp[i][j][num] += dp[i][j][num - ] * (i*j - num + ) / (cnt - num + );
} double ans = ;
int tt = n*m;// max(n*(m - 1) + 1, (n - 1)*m + 1);
for(int i = ; i <= tt; ++i)
ans += dp[n][m][i] * i;
printf("%.12lf\n", ans); }
return ;
}

zoj3822的更多相关文章

  1. zoj3822 Domination(概率dp)

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

  2. zoj3822 期望dp

    每天在一个n*m的棋盘上放棋子,问使得每一行,每一列都有棋子的期望天数 dp[n][m][k] 表示用k个棋子占据了n行,m列,距离目标状态还需要的期望天数 那么dp[n][m][k] = p1 * ...

  3. ZOJ3822 ACM-ICPC 2014 亚洲杯赛事现场牡丹江司D称号Domination 可能性DP

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

  4. ZOJ-3822

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

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

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

随机推荐

  1. php-新特性,生成器的创建和使用

    mark 一下~ http://laravelacademy.org/post/4317.html

  2. ionic简单路由及页面传参

    1)页面跳转及传参方法 angular.module('app.routes', [])//routes路由模型 .config(function($stateProvider, $urlRouter ...

  3. divmod()

    divmod() 接收两个数值,然后以元组的形式返回这两个数值的商和余数 In [1]: divmod(5, 2) Out[1]: (2, 1) In [2]: divmod(10, 7) Out[2 ...

  4. 说说FATFS文件系统(转)

    FATFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块.FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开.因此,它独立(不依赖)于硬件 ...

  5. jQueryValidate实现重复性验证

    $(function(){      $("#frm").validateForm({           rules:{                'caResourceSt ...

  6. JavaScript 中的陷阱

    JavaScript 通过函数管理作用域.在函数内部声明的变量只在这个函数内部,函数外面不可用.另一方面,全局变量就是在任何函数外面声明的或是未声明直接简单使用的. “未声明直接简单使用”,指的是不用 ...

  7. JS-制作留言提交系统(支持ctrl+回车)

    弹出键值说明: //console.log(ev.keyCode)//回车:13//ctrl:17 <!DOCTYPE html> <html> <head> &l ...

  8. Lucene中的域选项

    Field类是lucene在索引过程中的一个很重要的类,该类控制着域值被索引的方式 域选项主要包括以下几种选项:域索引选项.域存储选项.域的项向量选项.域的排序选项等 域索引选项:通过倒排索引来控制域 ...

  9. 【BZOJ3362-3365】USACO水题四连A

    [BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤ ...

  10. 关于Visual Studio 20**自动添加头部注释信息

    作为一个万年潜水党,不管这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们 ...