题目:https://www.luogu.org/problemnew/show/P1970
花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。
具体而言,栋栋的花的高度可以看成一列整数h1,h2,...,hn。设当一部分花被移走后,剩下的花的高度依次为g1,g2,...,gm,则栋栋希望下面两个条件中至少有一个满足:
条件A:对于所有g2i>g2i−1,g2i>g2i+1
条件B:对于所有g2i<g2i−1,g2i<g2i+1
请问,栋栋最多能将多少株花留在原地。
题目就是求一个最长波浪线。。。
根据xyl大佬的点拨:
每个单调区间不管多长只能选一个(好好理解一下)
然后就迎刃而解了~~~(xyl真滴强)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxS=100000;
int a[maxS+5];
int main()
{
int i,ans=0,n,i1,tot;
freopen("a.txt","r",stdin);
scanf("%d",&n);
if (n==1)
{
printf("1");
return 0;
}
i1=0;
for (i=1;i<=n;i++)
{
i1++;
scanf("%d",&a[i1]);
if (a[i1]==a[i1-1])
i1--;
}
tot=i1;
for (i=2;i<tot;i++)
if ((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1]))
ans++;
printf("%d",ans+2);
return 0;
}