HDU 5245 上海大都会 J题 (概率期望)

这道题的概率可以单独考虑每个格子对期望的贡献值。因为其实每个格子是否被选都可以认为是独立的,单独一个格子贡献的期望为1*(该格子K次被选的概率),所以答案其实就是每个格子K次被选中的概率之和。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;

int main(){
	LL n,m; int k;
	int T,icase=0;
	scanf("%d",&T);
	while(T--){
		scanf("%lld%lld%d",&n,&m,&k);
		double output=0;
		for(LL i=1;i<=n;i++){
			for(LL j=1;j<=m;j++){
				LL ans=(i-1)*(i-1)*m*m;
				ans+=(n-i)*(n-i)*m*m;
				ans+=n*n*(j-1)*(j-1);
				ans+=n*n*(m-j)*(m-j);
				ans-=(i-1)*(i-1)*(j-1)*(j-1);
				ans-=(n-i)*(n-i)*(j-1)*(j-1);
				ans-=(i-1)*(i-1)*(m-j)*(m-j);
				ans-=(n-i)*(n-i)*(m-j)*(m-j);
				double p=ans*1.0/(n*n*m*m);
				double tmp=1.0;
				for(int c=1;c<=k;c++)
				tmp*=p;
				output+=(1.0-tmp);
			}
		}
		printf("Case #%d: %.0f\n",++icase,(output));
	}
	return 0;
}

  

时间: 2024-12-22 07:29:51

HDU 5245 上海大都会 J题 (概率期望)的相关文章

HDU 5241 上海大都会 F题

留意到,每一种语言的情况其实是独立的,也就是说,每一种语言的集合的包含的情况都是符合要求的.一种语言在图上可以有32种情况(由数据2知),所以,总的数就是32^n import java.util.*; import java.math.*; public class Main { static public void main(String []args){ Scanner scan=new Scanner(System.in); int T,icase=0; T=scan.nextInt()

HDU 5239 上海大都会 D题(线段树+数论)

打表,发现规律是存在一定次数(较小)后,会出现a=(a*a)%p.可以明显地发现本题与线段树有关.设置标记flag,记录本段内的数是否均已a=a*a%p.若是,则不需更新,否则更新有叶子结点,再pushup. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define LL unsigned long long using namespace st

HDU 5242 上海大都会 G题

这道题其实是求K条最长的不重叠的链.贪心算法+DFS即可求.深度优先搜索时,返回当前子树的最长链,使用优先队列保存其他孩子结点的最长链,即可.求结果时只需从优先队列中取前K个值的和.这相当于暴力删除每条最长的链. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define LL long long us

HDU 4418 高斯消元解决概率期望

题目大意: 一个人在n长的路径上走到底再往回,走i步停下来的概率为Pi , 求从起点开始到自己所希望的终点所走步数的数学期望 因为每个位置都跟后m个位置的数学期望有关 E[i] = sigma((E[i+j]+j)*P[j]) 我们需要将模型转化一下,本来路径为012345这样,因为来回走,我们多定义n-2个点就是 0123454321然后利用取模就可以不断找到下一组相关的m个点 列出多元方程组,利用高斯消元解决问题 1 #include <cstdio> 2 #include <cst

HDU 4586 Play the Dice(概率+期望)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4586 Problem Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equal possibility to show up when one rolls a dice. Each side has an integer ai on it. Now here is a

2019.4.9 一题——概率期望+0/1分数规划+最大权闭合子图

没注意 “第 x 条边和第 y 条边的起点是相同的” 的限制.没想出来. 有这个限制,可以考虑每个点分别计算.令 \( f[i] \) 表示从 i 出发的最大边数期望,那么先把拓扑序在自己之后的点的 \( f[ ] \) 算出来,然后考虑自己这个点的出边怎么做能使自己的 \( f[ ] \) 最大. \( f[i]=\frac{ \sum f[j]+1 }{ d } \) ,其中 d 是保留下来的边数, j 是保留边指向的点. 如果把 \( f[ ]+1 \) 看做收益, 1 看做代价,那么这个

HDU 5245 Joyful (概率题 求期望)

Joyful Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 478    Accepted Submission(s): 209 Problem Description Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a

J - Joyful HDU - 5245 (概率)

题目链接: J - Joyful  HDU - 5245 题目大意:给你一个n*m的矩阵,然后你有k次涂色机会,然后每一次可以选定当前矩阵的一个子矩阵染色,问你这k次用完之后颜色个数的期望. 具体思路:颜色个数的期望等于每一个方块单独的期望加起来,就是总的期望. 对于当前的方块的期望,我们先计算这个方块不会出现的概率,就是当前的(x,y),先计算出当前的两个点在他周围四整块的出现的概率,但是这样四个角会重复计算,再去掉就好了. AC代码: 1 #include<bits/stdc++.h> 2

2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)

题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的那个去做,问她最终有一个账号达到1000分需要做的比赛的次数的期望值. 思路 :可以直接用公式推出来用DP做,也可以列出210个方程组用高斯消元去做. (1)DP1:离散化.因为50,100,1000都是50的倍数,所以就看作1,2,20.这样做起来比较方便. 定义dp[i]为从 i 分数到达i+1