10.25考试小结

今天的题感觉还可以,第三题除外。

T1实在是太水了,开两个flag数组O(n)就可以AC。

T2一开始毫无头绪,后来仔细想了想可能是DP,01背包嘛,对于每一条直线,都只有取与不取两种操作,但是转移方程没法写,因为不好判断某条直线能不能取。

因为我实在想不出其他的写法(除了暴力),所以我还是花了很长时间写了写,我计算了对于每个答案dp[i][j]对下一条直线的要求,具体就是计算斜率的最大值与最小值,遇到新的直线时,根据y值的差计算要想取这条线段,该线段必须满足的区间范围,根据基准线段的左端点得出区间的右端点,根据基准线段的右端点得出区间的左端点。光这个思路我就写了好久,写好了以后呢,样例都过不了,后来跟踪查错发现:有时更新 对于下一条线段的条件 会出错,具体来说就是这样更新的话,有时下一条线段满足区间的范围,但是根据新线段更新对于新线段的下一条线段的条件时,前面已经取的线段会不满足要求,简单地说,就是判断下一条线段能不能取有时会出错,导致后面的答案全错。(由此观之,样例还挺良心的)然后我又加了个限制条件,每次新取线段时,用基准线段的左端点与新线段的左端点求一个斜率,用基准线段的右端点与新线段的右端点求一个斜率,然后每次判断线段时,再根据这个斜率求出一个区间,这个区间是取点的大前提,如果前面得出的区间与该区间没有公共区间,那么显然是不能取的。。

思路就是一个n²的01背包,但是很难实现,条件真的太难更新了,直到现在我还觉得我的思路没有一点问题,我现在甚至觉得条件处理好了这样写肯定能AC,但是我改了又改还是不行。。

正解很简单,就是枚举每两个端点扫一遍,复杂度n²logn,实现也不难,题解说的很清楚,看了题解以后很快就A掉了,这里就不多啰嗦了。

T3真的不可写。

猜你喜欢

转载自www.cnblogs.com/victor2020/p/9853045.html
今日推荐