博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
花匠(codevs 3289)题解
阅读量:4547 次
发布时间:2019-06-08

本文共 985 字,大约阅读时间需要 3 分钟。

【问题描述】

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

具体而言,栋栋的花的高度可以看成一列整数h_1, h_2, … , h_n。设当一部分花被移走后,剩下的花的高度依次为g_1, g_2, … , g_m,则栋栋希望下面两个条件中至少有一个满足:
条件 A:对于所有的1<i<m/2,g_2i > g_2i-1,且g_2i > g_2i+1; 
条件 B:对于所有的1<i<m/2,g_2i < g_2i-1,且g_2i < g_2i+1。
注意上面两个条件在m = 1时同时满足,当m > 1时最多有一个能满足。
请问,栋栋最多能将多少株花留在原地。

【样例输入】

    5 

    5 3 2 1 2

【样例输出】

    3

【解题思路】

     本题为NOIP2013提高组day2第二题,本人认为该题应该是第一题的难度……之所以放在第二题,也许是因为条件写得丑了点怕别人看不清。看清条件这道题就很简单了。

     这个条件的意思就是让你找转折点的数量即g(i-1)<gi>g(i+1)或g(i-1)>gi<g(i+1),gi即是转折点。

     首先可以肯定的是,当花的数目为1的时候,可以直接输出1。首尾两株花都肯定是可以留下的,因此,当花的数目大于等于2时,我们可以将答案初始化为2,然后加上转折点的数目即可,代码没超过25行……

【代码实现】

var a:array[0..100001] of longint;    w,n,i,ans:longint;begin readln(n); a[0]:=-maxlongint; for i:=1 to n do  begin   inc(w);   read(a[w]);   if a[w]=a[w-1] then    dec(w);  end; if w=1 then  begin   writeln(1);   halt;  end; ans:=2; for i:=2 to w-1 do  if ((a[i]>a[i-1])and(a[i]>a[i+1]))or((a[i]

 

转载于:https://www.cnblogs.com/PengBoLiuXu/p/4538499.html

你可能感兴趣的文章
STL内存分配方式
查看>>
NS2移动节点
查看>>
python学习之路(十一)
查看>>
CSS让浮动元素水平居中
查看>>
-----------------时间线分水岭--------------------------
查看>>
Stsadm.exe 怎么用?
查看>>
使用spring中4.2.6版本使用@Value取值失败,结果为${xxx}的情况
查看>>
LOJ6583 ICPC World Finals 2019何以伊名始(广义后缀自动机)
查看>>
lightoj 1031【区间DP,未完待续】
查看>>
11、求二进制中1的个数
查看>>
【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--请求处理结果适配篇(7/8)...
查看>>
CodeForces 731A Night at the Museum
查看>>
MySQL 删除数据库
查看>>
JavaScript 字符串(String) 对象
查看>>
How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
查看>>
微信小程序picker组件 - 省市二级联动
查看>>
Dynamics CRM 给视图配置安全角色
查看>>
Eclipse修改已存在的SVN地址
查看>>
C++ ACM基础
查看>>
(转)使用 python Matplotlib 库绘图
查看>>