洛谷1970 花匠
简要题意
给定一个序列,求最长波浪子序列。
波浪序列是指一个大一个小这样循环或一个小一个大这样循环。
简要题解
算法1:DP+线段树优化
设$up[i]$表示到$i$结尾,这一个数比上一个数大的最长长度。
设$down[i]$表示到$i$结尾,这一个数比上一个数小的最长长度。
可以很显然的发现$O(n^2)$的状态转移方程(略)
然后用线段树优化一发,复杂度变为$O(n log 1000000)$
代码略。
算法2:贪心
XJB乱贪心。
首先第一个一定选。
接着第二个只要和第一个不一样就选。
接下来每一个:如果和前一个方向不一样就选,否则用它替代前一个(这样更容易找到方向不一样的。)
就行了。
没错就这么简单,$O(n)$。
代码同样略。(虽然我写了)