洛谷1970 花匠

简要题意

给定一个序列,求最长波浪子序列。

波浪序列是指一个大一个小这样循环或一个小一个大这样循环。

简要题解

算法1:DP+线段树优化

\(up[i]\)表示到\(i\)结尾,这一个数比上一个数大的最长长度。

\(down[i]\)表示到\(i\)结尾,这一个数比上一个数小的最长长度。

可以很显然的发现\(O(n^2)\)的状态转移方程(略)

然后用线段树优化一发,复杂度变为\(O(n log 1000000)\)

代码略。

算法2:贪心

XJB乱贪心。

首先第一个一定选。

接着第二个只要和第一个不一样就选。

接下来每一个:如果和前一个方向不一样就选,否则用它替代前一个(这样更容易找到方向不一样的。)

就行了。

没错就这么简单,\(O(n)\)

代码同样略。(虽然我写了)