HDU5181 numbers,Zory的N0IP模拟赛,栈与卡特兰数的思考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Deep_Kevin/article/details/102711900

正题

      没有Portal

      因为我自己也没有做掉这题,因为我还想再想想。

      我是这样想的,考虑一个栈没有限制的时候的出栈顺序,有:

       f[n]=\sum_{i=1}^n f[i-1]*f[n-1-i]

      我们令第i个元素最后出栈,前i-1个元素先出栈,再让后n-1-i个元素出栈。

      显然i最后出栈前面两部分不能调换。

      转化为更通俗易懂的形式:F[l][r]=\sum_{i=l}^r F[l][i-1]*F[i+1][r]

      接下来,我们考虑给出的(x,y)要求x在y之前出栈,显然只对l<=min(x,y),max(x,y)<=r的区间造成影响。

      若x<y,那么说明转移的k\not = x,因为这样的话x就最后出来了,否则其他情况x都比y先出来。

      若y<x,那么说明转移的k\not \in (y,x],取这个区间会导致y在x前面出来。

      我们对于每一个k开一个二维数组来存储是否可以用k来转移。

      一开始肯定可以,对于一个操作,向上面分类讨论那样,对于l<=min(x,y),max(x,y)<=r的区间打标记就可以了。

      相当于一个矩阵标记,差分最后前缀和即可。

猜你喜欢

转载自blog.csdn.net/Deep_Kevin/article/details/102711900