【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 <script type="math/tex" id="MathJax-Element-16">m</script>个约束,只要放要求较大那个数时判一下是否符合就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值