简要题意

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

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

简要题解

算法1:DP+线段树优化

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

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

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

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

代码略。

算法2:贪心

XJB乱贪心。

首先第一个一定选。

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

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

就行了。

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

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

标签: NOIP, 贪心

添加新评论