E. Cow and Treats

题意

一行多个颜色,挑选尽可能多的颜色,保证存在一个界限,界限往左和往右最多某种颜色只有一个。保证这个颜色必须是某头牛需要的颜色。

题解

题意简化之后就是枚举分界点,由于颜色互不干扰,所以颜色也可以枚举。
得到分界点左右每个颜色的个数(统计的时候可以 O ( 1 ) O(1) 递推着求)
从而可以二分出有多少牛可以选。
得到 L , R L,R ;
为了保证不重复选同一只,答案是 m i n ( L , R ) ( m a x ( L , R ) 1 ) min(L,R)*(max(L,R)-1)
但是如果只存在一边有,那么这个颜色贡献只有 1 1 了,方案数是相加。

还有一个问题就是枚举分界点的时候,可能会有相同方案,我们需要人为把方案特殊化。总方案数可以划分成:不选右边的,选了第 i i 个作为右边的;
前者即是 L = n , R = 0 L=n,R=0
后者,为了保证答案最大, L = i 1 L=i-1 ,这样能保证求的答案最大,并且由于特殊化了 R R ,所以方案不会重复。

操作就是计算出所有 L = 0... n 1 , R = L + 2 L=0...n-1,R=L+2 的方案数,即不包括第 i i 个方案数。
总方案数减去即可。

这道题困扰了我好久,最后照着别人代码写,就不贴了,数理基础太差了。最近学习算法的重心应该从差分约束转变为莫比乌斯。

发布了203 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/mxYlulu/article/details/104405539
今日推荐