由于我不太会写 觉得从比赛开始就冷静分析。然后看完三道题心态有点爆炸没有紧扣题目的性质。
这个心态是不可取的尽量不要有畏难心理 不要草草的写暴力。
LINK:[最长01子序列](http://zhengruioi.com/contest/399/problem/960)
对于一个序列要求最长01子序列 显然不太能写感觉无从下手的样子 不妨简化一下问题 先推出来一些性质。
如果求连续的最长01子序列且满足题目中的性质我们显然是根据每一个1进行统计答案。我们直接扫一遍即可。
如果是序列呢 我们发现这个序列两个1之间相差的x是关键 因为没有这个x我们不知道自己算的是哪一种。
这个比较暴力的做法是暴力枚举x 然后统计答案 如何统计答案?显然的有贪心前面的0能选就选了这样显然对后面会更优的。
不那么暴力的做法 事实上我有一个假做法 当时以为这是一个单峰函数 但是结果并非如此因为我无法证明这是单峰函数。
实际上也并非单峰函数 因为这个某个x与其相关的y的值和1和0的个数以及其分布位置是有关的 所以这并非单峰函数。(脑残写了一个三分
害怕超时所以把1抽了出来然后预处理了两个数组 暴力枚举x 然后贪心的判断 然后A掉了这道题。
说起来 这个也算是极大的优化吧。考虑正解:正解和上述做法有异曲同工之妙但是复杂度是有保证的。
都是暴力枚举 然后 匹配的话为了为了每次匹配到下一个1决定二分寻找下一个1 显然对于我们枚举的x 1的个数为n/x
那么我们要二分1个个数次 所以 1个数为n/1+n/2+..n/n显然根据调和级数我们1的个数最多有lnn个所以总复杂度为nlnnlogn
还算很好写..
```
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include