10.13_

 

A. 简单的序列

 方法一:简单DP。

设$f[][]$表示考虑i个字符,'('与')'相差j个时的方案数。

转移:$f[i][j]=f[i-1][j-1]+f[i-1][j+1]$

考虑剩余的n-m个字符的构造。当原m个字符中‘('<’)‘时,我们会对前面有一些特殊的限制。

因为我们要保证合法的话,就要保证任何时刻'('>')'。

在前面的字符f数组就表示 ( 比 ) 多,后面的字符串就表示)比(多。

方法二:利用Catlan思想。

我们考虑构造这两段字符的过程。

我们把(的贡献设为一,)的贡献设为负一。

那么我们枚举第一段的长度i,贡献j。

它的方案数就是$C(i,(i+j)/2)-C(i,(i+j)/2+1)$

后面那一段的方案数呢。

我们设$x=n-m-i,y=j+sum$

x代表横坐标,y代表纵坐标。

考虑到我们后一段因为前一段+中间已经保证了我们最后一段剩下的一定只还剩补上一些)和()。

所以一个)为-1,一个(为+1,那么问题变成了在二维坐标系里,从(0,y)走到(x,0)的方案数。

为什么起点是y?因为j表示的是第一段我们故意添加的(数,而j+(负的)sum等价于还有多少剩余的(等着我们去填。

所以要多填),使最后得数为0。

B. 简单的期望 

dp的定义比较好。

设dp[i][j][s][k]表示考虑到第i个选择,二进制下此时后8位的状态为j,从第九位开始连续的数的个数,第九位是0/1的概率。

考虑为什么要这么定义。

首先,加法会破坏原有的答案,那么考虑枚举最后8位的话,每次总是两个log

你可能感兴趣的:(10.13_)