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