!codeforces 399D Painting The Wall-概率dp

题意:有一个n*n的墙,现在小明来刷墙,如果每一行每一列都至少有一个格子刷过了就停止工作,否则每次随机选一个格子,如果刷过了就不刷如果没刷过就刷,然后休息一分钟,求停止工作时时间的数学期望(开始之前已经有m个格子刷过了)

分析:概率dp

状态:dp[i][j]表示还有i行j列没刷,则它能转移到的状态是dp[i][j],dp[i-1][j-1],dp[i][j-1],dp[i-1][j-1]

转移:dp[i][j]=dp[i][j]*(n-i)(n-j)/n^2+dp[i-1][j]*(i*(n-j))/n^2+dp[i][j-1]*((n-i)*j)/n^2+dp[i-1][j-1]*(i*j)/n^2

初始化还没太懂

代码:

#include<iostream>
#include<cstdio>
using namespace std;
double dp[2010][2010];
int n,m,a[2010],b[2010];
int main()
{
	cin>>n>>m;
	int x,y;
	int l=n,r=n;
	for(int i=0;i<m;i++){
		cin>>x>>y;
		if(!a[x]) l--;
		if(!b[y]) r--;
		a[x]=1,b[y]=1;
	}
	for(int i=1;i<=l;i++) dp[i][0]=dp[i-1][0]+(double)n/i;
	for(int j=1;j<=r;j++) dp[0][j]=dp[0][j-1]+(double)n/j;
	for(int i=1;i<=l;i++){
		for(int j=1;j<=r;j++){
			dp[i][j]=(dp[i-1][j]*i*(n-j)+n*n+dp[i][j-1]*j*(n-i)+dp[i-1][j-1]*i*j)/(n*n-(n-i)*(n-j));
		}
	}
	printf("%0.8lf\n",dp[l][r]);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 11:37:11

!codeforces 399D Painting The Wall-概率dp的相关文章

Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP

                                                                               D. Painting The Wall User ainta decided to paint a wall. The wall consists of n2 tiles, that are arranged in an n × n table. Some tiles are painted, and the others are not

[Codefoeces398B]Painting The Wall(概率DP)

题目大意:一个$n\times n$的棋盘,其中有$m$个格子已经被染色,执行一次染色操作(无论选择的格子是否已被染色)消耗一个单位时间,染色时选中每个格子的概率均等,求使每一行.每一列都存在被染色的格子的期望用时. 传送门 显然,被染色的砖的位置对解题是没有影响的,我们可以将已染色砖所在的行和列移动到右下角,问题就转化到了在更小棋盘中的新问题. 在任一时刻,棋盘内的状态如下: 其中绿色区域为当前问题的棋盘,选中对行和列都有贡献: 选中黄色对行或列有贡献: 选中红色没有贡献: 设$f[i][j]

CodeForces 540D Bad Luck Island 概率dp

CodeForces 540D 应该是简单概率dp,由于写得少显得十分蠢萌 求期望逆推,求概率正推,大概是这么个意思,贴一发留恋 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define db double const int maxn=108; db dp[maxn][maxn][maxn]; int main() { int i,j,n,m,k,p; whi

Codeforces 148D Bag of mice (概率dp)

D. Bag of mice time limit per test:2 seconds memory limit per test:256 megabytes The dragon and the princess are arguing about what to do on the New Year's Eve. The dragon suggests flying to the mountains to watch fairies dancing in the moonlight, wh

Codeforces 518D Ilya and Escalator (概率dp)

Ilya and Escalator time limit per test: 2 seconds memory limit per test: 256 megabytes Ilya got tired of sports programming, left university and got a job in the subway. He was given the task to determine the escalator load factor. Let's assume that

Codeforces 513G1 513G2 Inversions problem 概率dp

题目链接:点击打开链接 题意: 给定n ,k 下面n个数表示有一个n的排列, 每次操作等概率翻转一个区间,操作k次. 问: k次操作后逆序数对个数的期望. 思路: dp[i][j]表示 a[i] 在a[j] j前面的概率 初始就是 dp[i][j]  = 1( i < j ) 则对于翻转区间 [i, j], 出现的概率 P = 1 / ( n * (n+1) /2) 并且会导致 [i, j]内元素位置交换,枚举这次翻转的区间时所有的转移情况 #include <stdio.h> #inc

CodeForces 148D-Bag of mice(概率dp)

题意: 袋子里有w个白球b个黑球,现在两个人轮流每次取一个球(不放回),先取到白球的获胜,当后手取走一个球时,袋子里的球会随机的漏掉一个,问先手获胜的概率. 分析: dp[i][j]表示袋子中i个白球j个黑球,先手取获胜的概率. 有四种情况 先手取到白球,获胜概率1.0*i/(i+j); 后手取到白球,先手输 前两次都取到黑球,漏掉一个黑球,转移到dp[i][j-3] 前两次都取到黑球,漏掉一个白球,转移到dp[i-1][j-2] #include <map> #include <set

codeforces D. Painting The Wall

http://codeforces.com/problemset/problem/399/D 题意:给出n和m,表示在一个n*n的平面上有n*n个方格,其中有m块已经涂色.现在随机选中一块进行涂色(如果已经涂色跳过,也消耗时间),消耗1个步骤.终止条件为每行每列都有至少有一块瓷砖被涂色.问说涂成满意的情况需要时间的期望. 思路:把整个方格分成四部分,如果选择左上角上的一块,那么行和列都将被涂上一个:右上角的话,行被涂上一个,列不变:左下角的话,行不变,列被涂上一个:右下角,行列都不变. 状态转移

CodeForces 499D. Name That Tune(概率dp)

It turns out that you are a great fan of rock band AC/PE. Peter learned that and started the following game: he plays the first song of the list of n songs of the group, and you have to find out the name of the song. After you tell the song name, Pet