Pre
差点就A了第二题,真的气得我无话可说……
T1
考虑这个串一定是长度为x的循环节,那么x十分难确定,所以枚举x!这个x的范围是1~N的,那么时间复杂度呢?会炸吗?
不会,复杂度是N乘N的调和级数,由于每次check是O(N)的,所以是NlnN,炸不了。check的方法就是看每个循环节里面第一个出现的位置和最后一个出现的位置处理出来,然后判断是否合法就好啦!
T2
这题水水的Dp,我就是少了一个For循环寻找最优解,就Wa掉了96分完了,唉,难受……
首先贪心一定是错误的,因为当前最优的选择不一定是最优解,所以考虑能够深思熟虑的Dp来求解,那么如何定义Dp呢?
想了很久呢,还是挖掘出了这道题的Dp方法,首先这道题的性质就是只能选择两端的馅饼,那么可以直接记录状态左端点取到了哪一块,右端点取到了哪一块,数据范围告诉我们这题是N^2Dp,所以很明显这种状态是正确的;由于饼是一个圆,为了方便,我们可以将原先的序列复制,只要取连续长度为N的一段就是一块饼了;诶,这不就是,一个区间Dp嘛——现在取完了区间i~j的所有饼块,但是下一步怎么取,该谁取呢?首先发现长度为奇数的i~j一定是哥哥最后一步取,否则就是妹妹取,那么,只用枚举区间长度,首端点【这是区间Dp的技巧,使得用来更新当前Dp状态的所有前Dp状态都已经被推过了】,Dp转移就好啦!
T3
建图拆点,跑最短路……完了