[noip2013tg] 花匠

来源:互联网 发布:我叫mt源码 编辑:程序博客网 时间:2024/04/29 21:01

[题目链接](http://www.luogu.org/problem/show?pid=2832

题解:我们对这道题目进行分析,发现这道题目要求的实际上是最长的波动子序列。
对于一段单调的序列(注意,这里的单调指的是单调不增或者单调不减),我们最多从中取两个点。
所以,如果我们取整个序列的拐点的话,能够得到最优方案。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int n,tot,flag;//1表示当前上升,2表示当前下降,初始为0 int a[100005];inline void init(){    cin>>n;    for(int i=1;i<=n;i++)    scanf("%d",&a[i]);    tot=1;flag=0;//第一个必然保留 }inline void work(){    for(int i=2;i<=n;i++)    {        if(a[i]>a[i-1]&&flag!=1)//上升且未统计         {            flag=1;            tot++;        }        if(a[i]<a[i-1]&&flag!=2)        {            flag=2;            tot++;        }    }    printf("%d\n",tot);}int main(){    init();    work();    return 0;} 
0 0