传送

首先,这道题据说是一个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][]));
}

P1970花匠的更多相关文章

  1. Luogu P1970 花匠

    Luogu P1970 花匠 本质上就是找最长的波浪序列. 因为考虑到第一个必选,所以可以让$lst=h[1]$. 此外,注意到$n=1$是要特判,其他情况下显然$ans\geq 2$,所以把$dir ...

  2. DP练习题——洛谷P1970花匠

    目录 题目描述: 输入输出格式: 输入格式: 输出格式: 输入输出样例: 输入样例: 输出样例: 题目分析: 解法一: 解法二: 结语: 题目描述: 洛谷\(P1970\) 花匠栋栋种了一排花,每株花 ...

  3. [NOIP2013] 提高组 洛谷P1970 花匠

    题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希 望剩下的花排列得比较别致. 具 ...

  4. Luogu P1970 花匠 【线性Dp】 By cellur925

    题目描述 Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花 ...

  5. 洛谷 P1970 花匠 —— DP

    题目:https://www.luogu.org/problemnew/show/P1970 普通的DP,f[i][0/1] 表示 i 处处于较小或较大的长度: 注意:1.树状数组向后 query 时 ...

  6. 洛谷——P1970 花匠

    https://www.luogu.org/problem/show?pid=1970 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走, ...

  7. 洛谷 P1970 花匠

    题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体而 ...

  8. P1970 花匠

    状态定义是dp中非常重要的,可以直接影响到效率,如此题,第一种思路是: #include <bits/stdc++.h> using namespace std; const int ma ...

  9. 洛谷P1970 花匠

    传送门 首先可以知道,如果一个序列是连续上升的,那么只需要取这一个序列中最高的元素即可,因为取其它的不能保证大于后面的.连续下降的序列同理.而这些恰好就是波峰和波谷. 所以遇到 $ j $ 比之前的 ...

  10. 洛谷P1970 花匠(dp)

    题意 题目链接 Sol 直接用\(f[i][0/1]\)表示到第\(i\)个位置,该位置是以上升结尾还是以下降结尾 转移的时候只需枚举前一个即可 #include<cstdio> #inc ...

随机推荐

  1. [10期]浅谈SSRF安全漏洞

    引子:SSRF 服务端请求伪造攻击 很多web应用都提供从其他服务器上获取数据的功能.使用用户指定的URL,web应用可以从其他服务器获取图片,下载文件,读取文件内容等. 这个功能被恶意使用的话,可以 ...

  2. 虚拟机 vs 容器

    虚拟机 虚拟机本质上是模拟,模拟物理机上的硬件 虚拟机必须安装操作系统 一个虚拟机操作系统的崩溃不会影响到其他虚拟机 容器 容器的本质是经过隔离与限制的linux进程 容器使用的是物理机的资源 容器之 ...

  3. pandas入门(1)

    import pandas as pd import numpy as np # 自动创建索引 obj = pd.Series([4, 7, -5, 2]) print(obj, type(obj)) ...

  4. ntp局域网时间同步操作

    需求:局域网里面有两台电脑需要同步时间 一台windows,一台Linux.把windows当作服务器 windows10自带ntp服务器,可以按如下步骤进行设置 1. 打开注册表编辑器,在运行里面输 ...

  5. [Python3 练习] 001 温度转换1

    题目:温度转换 I (1) 描述 温度的刻画有两个不同体系:摄氏度 (Celsius) 和华氏度 (Fabrenheit) 请编写程序将用户输入的华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度 转换 ...

  6. vueStudy

    目录层次: 目前学习曲线有三个前端开发,每个人有各自的目录,可以很好地对比彼此的代码.  unit1 邮箱验证 用户名 数字.字母.中文 .划线不能以下划线开头 2-12位 密码验证 6-20位英文和 ...

  7. IDEA创建SpringBoot+maven项目

    1.创建项目: 2.选择spring Initializr,注意要选择jdk,使用默认的spring.io这样就不用再去写pom文件了 3.输入项目名称: 4.选择Spring Web 5.目录结构:

  8. [常用类]Scanner 类

    Scanner 类 一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串. 该代码允许用户从System.in读取一个数字: Scanner sc = new Scanner(System.i ...

  9. java 继承extends 的相关知识点

    java只有单继承,不能多继承 子类只能继承父类的非私有成员(成员变量.成员方法) 子类不能继承父类的构造方法,但是可以通过super关键字访问父类的构造方法 继承 要体现子类父类的 继承关系, ”i ...

  10. 问题 H: 小k的简单问题

    问题 H: 小k的简单问题 时间限制: 1 Sec  内存限制: 128 MB提交: 107  解决: 57[提交] [状态] [命题人:jsu_admin] 题目描述 地图上有n个村庄,小k每个月需 ...