首页 > 编程知识 正文

betcom007,bonferroni post hoc test

时间:2023-05-05 19:17:16 阅读:57578 作者:2390

problemd : dinner bet[时间限制:1.5 squadmemorylimit 3360256 MIB]

题意是两个人在玩游戏,共有(n )张卡。 这两个人手上各有 ) m )张卡。 然后,每次操作,合计) )从n )张卡中随机抽出 ) d )张卡,两人手中都包含着它

构想一开始看到这个问题,我束手无策……我不知道这些卡的分数会怎么处理。

考虑到每张牌获得的概率相同,分数并不那么重要。 考虑到卡片的分数,可以把他们分为以下几类。

第一部分是只有第一个人有第二个人没有的牌。 第二部分是两个人都有的卡。 第三部分只有第二个人有第一个人没有的卡。 假设第2部卡片有(b )张,则很明显第1部和第3部都是 ) m-b )张。 ) )标记为a ),则出现在两人手中的牌为 ) tol=2*ab ) )张。

定义((DP[x][y][z] ) )表示在第一部分取 ) (x )、第二部分取 ) (个、第三部分取 ) (z ) )时可以玩好几次的期望

首先,如果(xy==m||yz==m () ),则游戏结束,(DP[x][y][z]=0) )。

在一次操作中,可以认为第一部分新生成(a )、第二部分新生成 (b )、第三部分新生成 (c )、剩下的(D-a-b-c)不会生成新的标记,该确定

[ DP [ x ] [ y ] [ z ]=1 sum _ { a=0} ^ { a-x } _ sum { b=0} ^ { myd yl } _ sum _ { c=0} ^ { a-z }

但是,这样操作可能会(a=b=c=0),需要分别取出。 也就是说,情况如下。

[ DP [ x ] [ y ] [ z ]=1p [0] [0] * DP [ x ] [ y ] [ z ]sum _ { a=0} ^ { a-x } _ sum _ { b=0} ^

把以上两个公式综合起来,可以得到

[ DP [ x ] [ y ] [ z ]=frac {1 sum _ { a=0} ^ { a-x } _ { b=0} ^ { myd yl } _ { c=0} ^ ^

其中分子部分不包括(a=b=c=0) )的情况。

接下来,只需求出(p[a][b][c] ) ()即可得到DP)。 )考虑到DP[x][y][z]-DP[xa][yb][zc] )过程,可以得到

[ p [ a ] [ b ] [ c ]=frac { c _ { a-x } ^ { a } * c _ { myd yl } ^ { b } * c _ { c } * c _ { xyzn-}

然后,可以通过(DFS ) )进行迁移。 # include map # includeset # include list # include ctime # include cmath # include stack # include queue # includecfloat # include ss include stack include cstdio # include bitset # includecstdlib # include cstring # include iostream # include algorithm # definelowbibivior definesesecond # definepiipairint,int#defineinopenfreopen(in.txt ',' r ',stdin ) )。 typedef long long int ll; 常数int maxn=1e510; 常数int maxm=1e510; const ll mod=1e9 7; const ll INF=1e18 100; const int inf=0x3f3f3f3f; constdoublepi=ACOS(-1.0; 常数双精度EPS=1e-8; 用户命名空间STD; int n,m,a,b,d; int cas,tol,t; bool vis[100]; ll C[55][55]; 双DP [ 12 ] [ 12 ] [ 12 ]; void handle () { C[0][0]=1; C[1][0]=C[1][1]=1; for(intI=2; i=50; I ) for(intj=0; j=i; j ) { C[i][j]=j==0? 1 : C[i-1][j-1] C[i-1][j]; }}voidDFS(intx,int y,int z ) if ) xy==m|||yz==m ) { dp[x][y][z]=0; 返回; (if ) DP[x][y][z]!=-1.0 (返回; 双精度t=0,sum=0; for(inta=0; a=A-x; a ) for(intb=0; b=mydyl; b ) for(intc=0; c=A-z; c ) if(abcd )连续; if(a==0b==0c==0) (t=1.0 * c (xyzn-tol ) ) d-a-b-c )/c (n ) ) d ); 继续; }else{DFS(xa、y b、z c ); sum=1.0 * c [ a-x ] [ a ] * c [ myd yl ] [ b ] * c [ a-z ] [ c ] * c [ xyzn-tol ] [ d-a-B- c ] * DP [ xa ] [ Yb ] } 返回; (}int main ) ) Scanf('%d%d ) d ),n,d,m ); handle (; mes(vis,0 ); for(intI=1,x; i=m; I )扫描(' % d ',x ); vis[x]=true; } A=B=0; for(intI=1,x; i=m; I )扫描(' % d ',x ); if(vis[x] ) b; else A; } tol=2*A B; for(intI=0; i=A; I ) for(intj=0; j=B; j ) for(intk=0; k=A; k ) { dp[i][j][k]=-1.0; } } DFS (0,0,0 ); printf('%.5f(n ),DP[0][0] ); 返回0; }转载于:https://www.cn blogs.com/jiaaaaaaqi/p/10836260.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。