题意
一行多个颜色,挑选尽可能多的颜色,保证存在一个界限,界限往左和往右最多某种颜色只有一个。保证这个颜色必须是某头牛需要的颜色。
题解
题意简化之后就是枚举分界点,由于颜色互不干扰,所以颜色也可以枚举。
得到分界点左右每个颜色的个数(统计的时候可以
递推着求)
从而可以二分出有多少牛可以选。
得到
;
为了保证不重复选同一只,答案是
但是如果只存在一边有,那么这个颜色贡献只有
了,方案数是相加。
还有一个问题就是枚举分界点的时候,可能会有相同方案,我们需要人为把方案特殊化。总方案数可以划分成:不选右边的,选了第
个作为右边的;
前者即是
后者,为了保证答案最大,
,这样能保证求的答案最大,并且由于特殊化了
,所以方案不会重复。
操作就是计算出所有
的方案数,即不包括第
个方案数。
总方案数减去即可。
这道题困扰了我好久,最后照着别人代码写,就不贴了,数理基础太差了。最近学习算法的重心应该从差分约束转变为莫比乌斯。