[ABC216H]Random Robots

Random Robots

题解

首先看到 k ⩽ 10 k\leqslant 10 k10的数据范围限制,应该很容易联想到状压。
同时题目有时要求路径无交,很容易想到通过容斥来转移。
我们定义 d p S dp_{S} dpS为对于集合为 S S S的点的合法方法数,考虑怎么对其进行转移。
我们如何处理两点的路径是否有交,可以直接根据两点的终点进行判断。
我们可以从左到右枚举点作为终点,加入状态,我们 d p dp dp会按照终点的顺序将机械人加入状态。
当我们枚举点 p p p作为机械人 x x x的终点,如果有比机械人 x x x编号大的机械人已经加入状态,那么那个机械人一定与我们的机械人 x x x有交点。
但并非编号比他小的机械人终点在它后面就与它没有交点,可能会有这种情况:
在这里插入图片描述
但这种情况我们可以将两者的终点交换一下,得到
在这里插入图片描述

相当于我们同样可以用不合法的情况将其容斥掉。
不如说当我们先加入红色节点,再加入蓝色节点时会产生上面的情况,而下面的情况自身是不会加入到状态中的,只会有我们在先加入蓝色节点,再加入红色节点时将其减去,以除掉上面的不合法状态。
事实上,我们一个机械人会与许多机械人产生交点,所以我们同样需要通过容斥来维护我们的 d p dp dp答案,一面重复减去同一方案。
如果一个机械人与奇数个机械人在终点上产生逆序对,我们就要减去该方案,与偶数个机械人产生逆序对就加上该方案。

而一个机械人从起点 a i a_{i} ai走到终点 b i b_{i} bi会走 b i − a i b_{i}-a_{i} bia

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值