zoj3822
这题说得是给了一个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的更多相关文章
- zoj3822 Domination(概率dp)
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
- zoj3822 期望dp
每天在一个n*m的棋盘上放棋子,问使得每一行,每一列都有棋子的期望天数 dp[n][m][k] 表示用k个棋子占据了n行,m列,距离目标状态还需要的期望天数 那么dp[n][m][k] = p1 * ...
- ZOJ3822 ACM-ICPC 2014 亚洲杯赛事现场牡丹江司D称号Domination 可能性DP
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
- ZOJ-3822
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
- zoj3822 Domination 概率dp --- 2014 ACM-ICPC Asia Mudanjiang Regional Contest
一个n行m列的棋盘,每次能够放一个棋子.问要使得棋盘的每行每列都至少有一个棋子 须要的放棋子次数的期望. dp[i][j][k]表示用了k个棋子共能占据棋盘的i行j列的概率. 那么对于每一颗棋子,在现 ...
随机推荐
- Duilib教程-HelloDuilib及DuiDesigner的简单使用
一.HelloDuilib 1. 首先理解DUILIB显示的一个基本流程,如下图: 在Duilib中,WindowImplBase 这个类代表了图中 “CWndClass”. 所以我们需要做的是: 1 ...
- background-clip和background-origin
background-clip 修剪:背景颜色从哪些区域开始显示,默认从border开始该属性指定了背景在哪些区域可以显示,但与背景开始绘制的位置无关,背景的绘制的位置可以出现在不显示背景的区域,这时 ...
- HTML基础做出属于自己的完美网页
HTML HTML解释: HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的规则(W3C),大家都来 ...
- kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决
最近刚刚入手研究kubernetes,运行容器的时候,发现一直处于ContainerCreating状态,悲了个催,刚入手就遇到了点麻烦,下面来讲讲如何查找问题及解决的 运行容器命令: kubectl ...
- C# MVC跳转
MVC方式: 显示提示框,并返回上一页 return Content("<script>alert('暂时没有实践作业!');history.go(-1);</script ...
- 【BZOJ3003】LED BFS+状压DP
[BZOJ3003]LED Description LED屏是由一个庞大的点阵小灯泡组成的,一开始每个小灯泡都不发光.每一行一共有N个小灯泡,依次标号为1~n.现在给定K个点,要求这K个点发光,其余点 ...
- Android在ArrayAdapter<>里如何得到List<>的Items
public class ItemAdapter extends ArrayAdapter<DemoModel> { private final List<DemoModel> ...
- ionic开发过程中遇到的一些坑!
总结一些:在使用 ionic 开发过程中所遇到的问题. 问题一:Cannot find module '@ionic/app-scripts' 描述:使用 ionic start 项目的时候,项目安装 ...
- ios8铃声
ios8铃声最新铃声 MP3版本 链接: http://pan.baidu.com/s/1bnGS8Uz 密码: 94g7 m4r版本 链接: http://pan.baidu.com/s/1pJyT ...
- 170804、使用Joda-Time优雅的处理日期时间
简介 在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的 ...