打表发现满足条件的序列上升的部分占绝大多部分,考虑从这个性质下手。
对于最优的情况,显然是每一步都会让两个元素都想有利于自己的方向前进,所以如果出现了长度大于等于 3 的下降子序列,那么就是一定不合法的。
具体的,因为如果出现 3 个以上的下降序列那么他就即需要向前走也需要向后走就不合法了,考虑用 DP 来计数。
设 fi,j 表示前 i 个位置的最大值为 j 的情况下后面 n−i 个位置的方案数,容易理解 i≤j。
如果填比 j 大的数,那么一定可以接在 j 的后面;如果要填比 j 小的数,那么必须填当前还没有填的中最小的,否则上升子序列将不止 2 个,所以:
fi,j=k=j∑nfi+1,k
用图像表示这样的地推,那么 fi,j 就相当于从 (i,j) 走到 (n,n) 不穿过 y=x 的方案数。
利用类似于卡特兰数的思路,我们可以得到:
fi,j=(n−i−12n−i−j−1)−(n−j−22n−i−j−1)
套路的,我们去枚举前缀一样的长度。
考虑分讨,写一个前缀和优化然后乱作即可。
容易想到,只需要保证每一行或者每一列有车就行了。
不妨设每一列都必须有车,那么如果需要有 k 组车相互可以攻击,那么就只需要把 n 个车放到 n−k 行,每一行都至少有一个。
如果不理解,不妨继续手玩一下,那么枚举有几个空盒子容斥就行了。
Ans=(n−kn)×2i=0∑n−k(in−k)×(−1)i×(n−k−i)n
时间复杂度为 O(nlogn)。
对于 {nm} 有递推式子:
{n+1m}={nm−1}+m×{nm}
那么得到:
{nm}={n−1m−1}+m×{n−1m}
所以在模 2 意义之下就是:
{nm}=⎩⎪⎪⎨⎪⎪⎧{n−1m−1}{n−1m−1}+{n−1m}m is even.Otherwise.
那么使用数形结合的思想,就相当于:
如果在位置 (x,y) 那么有情况:
- 如果 y 是奇数那么只能从 (x−1,y−1) 转移过来。
- 否则可以从 (x−1,y) 或者 (x−1,y−1) 转移过来。
那么假设有 d 行可以横着走,那么 d=⌊2M+1⌋ 则方案数位:
(d−1n−m+d−1)
所以怎么判断一个组合数的奇偶性呢,有结论只有 n&m=m 的时候 (mn) 才是偶数。