zoukankan      html  css  js  c++  java
  • luogu1970 花匠

    题目描述

    花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定

    把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希

    望剩下的花排列得比较别致。

    具体而言,栋栋的花的高度可以看成一列整数h1,h2..hn。设当一部分花被移走后,剩下的花的高度依次为g1,g2..gn,则栋栋希望下面两个条件中至少有一个满足:

    条件 A:对于所有g(2i)>g(2i-1),g(2i)>g(2i+1)

    条件 B:对于所有g(2i)<g(2i-1),g(2i)<g(2i+1)

    注意上面两个条件在m = 1时同时满足,当m > 1时最多有一个能满足。

    请问,栋栋最多能将多少株花留在原地。

    输入输出格式

    输入格式:
    输入文件为 flower .in。

    输入的第一行包含一个整数n,表示开始时花的株数。

    第二行包含n个整数,依次为h1,h2..hn,表示每株花的高度。

    输出格式:
    输出文件为 flower .out。

    输出一行,包含一个整数m,表示最多能留在原地的花的株数。

    输入输出样例

    输入样例#1:
    5
    5 3 2 1 2

    输出样例#1:
    3

    分析:
    不要看上面的描述这么恶心,其实就是在一个无序数列中
    找到尽量多的数,组成一个波浪序列
    这里写图片描述

    这里写代码片
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    int n; 
    
    int main()
    {
        scanf("%d",&n);
        int now,fro,tt=0;
        int f=-1;
        if (n<=2) 
        {
            printf("%d",n);
            return 0;
        }
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&now);
            if (i==1)
            {
                fro=now;
                continue;
            } 
            if (f==-1)
            {
                if (now<fro) f=0,tt++;  //down
                else if (now>fro) f=1,tt++;
                fro=now;
                continue;
            }
            if (now<fro&&f==1)
            {
                tt++;
                f=0;
            }
            else if (now>fro&&f==0)
            {
                tt++;
                f=1;
            }
            fro=now;
        }
        printf("%d",tt+1);
    }
  • 相关阅读:
    SlickEdit 中 GDB 调试时SIG32 使得无法跟踪的问题 解决方法
    ln与mount
    ubuntu12.04 的 root 用户显示 中文 和 默认显示中文的方法
    ASP.NET MVC控制器作用
    ASP.NET管道模型
    第二章MVC框架如何截获请求
    第一章MVC与WebForms处理请求的区别
    asp.net运行原理一
    一个通配符引起的错误
    关于权限
  • 原文地址:https://www.cnblogs.com/wutongtong3117/p/7673540.html
Copyright © 2011-2022 走看看