传送

首先,这道题据说是一个dp

其次,贪心就能做

我们先来看好想好写的贪心

按照题目来,所有偶数点要么都是凸的,要么都是凹的,不能有凸有凹。我们把每株花的高度都在平面直角坐标系中点出来,再连线。这样我们就得到了若干条直线。在直线上的点(不包含波峰&波谷)都是单调的,要么加上不满足偶数点是凹/凸的,要么就改变了后面偶数点的凹凸性。所以在直线上的点都不选。这样我们把所有的波峰,波谷都选下来,就是最终的答案了。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[],ans;//1↑,0↓
int no,l;
int read()
{
char ch=getchar();
int x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return f?-x:x;
}
int main()
{ n=read();
for(int i=;i<=n;i++)
a[i]=read();
if(a[]>a[])l=;//l记录a[i-1]对于a[i-2]是增还是减
if(a[]<a[])l=;
if(a[]!=a[])ans=;
for(int i=;i<=n;i++)
{
if(a[i]==a[i-])continue; //如果高度一样,就不管
no=-;
if(a[i]>a[i-])no=;//no记录a[i]对于a[i-1]是增是减
if(a[i]<a[i-])no=;
if(no!=l)ans++;//如果增减性变化,就说明出现波峰(波谷)
if(no!=-)l=no;
}
ans++;
printf("%d",ans);
}

再来看正解的dp

dp[i][0]代表这个点在删完花后的序列里,是下降时最多保留的花的数量

dp[i][1]代表是上升是最多保留的花的数量(还是在删完花的序列里)

其中,dp[i][o]=dp[i-1][1]+1.dp[i][1]=dp[i-1][0]+1,因为要使最终的序列是个波浪形的,就必须前一个降,后一个升(或者反过来)。

dp[i][0]=max(dp[i][0],dp[i-1][0]),dp[i][1]=max(dp[i][1],dp[i-1][1])

初始化:dp[1][0]=1,dp[1][1]=1

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[],dp[][],ma1,ma0;
int read()
{
char ch=getchar();
int x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return f?-x:x;
}
int main()
{ n=read();
for(int i=;i<=n;i++)
a[i]=read();
dp[][]=;dp[][]=;
ma1=,ma0=;
for(int i=;i<=n;i++)
{
if(a[i]>a[i-])dp[i][]=dp[i-][]+;
if(a[i]<a[i-]) dp[i][]=dp[i-][]+;
ma1=max(dp[i][],ma1);
ma0=max(dp[i][],ma0);
dp[i][]=ma1;
dp[i][]=ma0;
}
printf("%d",max(dp[n][],dp[n][]));
}

最新文章

  1. Container View 使用小技巧
  2. HTML实体
  3. 定位 - MapKit - 基本使用
  4. Oracle SQL Lesson (8) - 使用集合操作符(Union,Intersect,Minus)
  5. Pivot Index--Google
  6. javaweb中的关于编码问题总结
  7. 淘淘商城学习笔记 之 上传图片到远程服务器,图片的回显出现的bug
  8. Jenkins插件之显示构建时间
  9. React-记connect的几种写法
  10. scp复制文件到指定端口
  11. faker php测试数据库生成2
  12. 【nginx】nginx tomcat session 共享配置
  13. django的小操作,查询效率up, 引用art-template模板+djangorestframework
  14. Python3 enumerate() 函数
  15. win7电脑遇到端口被占用的情况该如何查看并将其关闭
  16. 简易2D横版RPG游戏制作
  17. ZOJ2201 No Brainer 2017-04-16 19:21 54人阅读 评论(0) 收藏
  18. leetcode记录-两数之和
  19. NYOJ 231 Apple Tree (树状数组)
  20. [sj系统] phabricator系统升级

热门文章

  1. Spring IoC,IoC原理
  2. CodeForces 877E DFS序+线段树
  3. JavaScript之BOM操作
  4. webpack搭建vue项目开发环境【文档向学习】
  5. c# ASP.NET MVC easyui-filebox 图片上传和显示
  6. SQL Server 基础知识/数据类型/数值类型
  7. maven 打包Scala代码到jar包
  8. spark复习笔记(3)
  9. 2、Jmeter测试
  10. sudo、su、suid