浙江省选一试讲课素材.pptVIP

  • 0
  • 0
  • 约3.29千字
  • 约 37页
  • 2026-11-04 发布于重庆
  • 举报

有一个栈,其中有n个数1~n按顺序依次进入栈顶,在某个时刻弹出。其中m个限制,形如数字A必须在数字B之前弹出。求方案总数,答案对大质数取模。n=300,m=90000。考虑没有限制的情况。令dp[l][r]表示仅仅只有l~r这些数字进出栈的情况。我们枚举最后出栈的数是x,那么有dp[l][r]=Σdp[l][x-1]*dp[x+1][r]。其实就是卡特兰数列啦。考虑一个限制A,B,表示A必须在B之前弹出。对于一个dp[l][r]若l=A=B=r,则A不能作为最后一个弹出,而其它都是可以的。为什么呢?当Ax=B时显然成立。当l=xA或Bx=r时对于一边是没有影响的,对于另一边在子dp中已经满足了A在B之前弹出。若l=B=A=r,则B+1~A不能作为最后一个出栈。若这些成为最后出栈的数,则B显然会比A先被弹出。枚举所有区间和x,判断是否可以转移。那么我们就有了一个n^3m的做法。令v[i][j][k]表示在dp[i][j]中k是否可以作为转移。注意到在每个限制中,不能取的数一定是连续的,因此我们对于每个限制可以枚举每个区间,用并查集维护,时间复杂度降为n^2mα(n)。观察一个限制A,B,对于它来说,有用的区间一定是l=min(A,B)且r=max(A,B)的,在二维平面中,这本质上构成了一个矩形。因此我们

文档评论(0)

1亿VIP精品文档

相关文档