【CF567F】Mausoleum

题目大意

求长度为 2n ,满足以下条件的序列 An 个数。

  • 0<=Ai<n
  • Cntx 为序列中 x 这个数出现的次数,则 Cnt0=Cnt1...=Cntn1=2
  • A0<=A1<=...Ak1<=Ak>=Ak+1>=...>=An2>=An1

此外还有额外的 m 个条件,形如 Ax=Ay Ax<Ay Ax<=Ay

n<=35,m<=100

分析

观察第二和第三个约束。
第三个约束是指它是一个单峰函数,第二个约束是指 [0,n) 中的所有数出现且恰好出现 2 次。那么从小到大考虑这 n 个数,当前这个数由于是还没放的数中最小的,故它不可能插在之后的数中间。那么就有三种情况:都放在最左、最右或者一个最左一个最右。那么状态只与当前放的数、左边界和右边界相关。记忆化搜索打起来比较方便。

关于那 m 个约束,只要放要求较大那个数时判一下是否符合就可以了。

你可能感兴趣的:(【CF567F】Mausoleum)