首先你发现你在dp的过程中实际上每一位要拆成四份贡献,设当前状态为sta,现在在放的是i,那么你需要知道1,i到sta,2,sta到i,3,i到sta的补集,4,sta的补集到i的信号传递数量,开四个肯定不行,而所以我们开两个。
注意到1和3可以互相算,2和4可以互相算,只需要知道从i传出的和传入的有多少就行了,预处理一下。和题解一样的是,把预处理的i这一位扔掉。但这样还是爆空间了,怎么办呢?
我们用unsigned short类型保存预处理数组,dp数组还是用int。注意这不是拼rp,因为同一对两个不同基站相互传递的次数不可能超过0.5n,正好在unsigned short范围之内,可以通过本题,而且非常好写。
想看代码可以私信我。