• P1970 花匠


    题意:给一个序列,让你删去最少的数使得剩余数满足下列条件之一

       1、对于所有正整数i,满足$b_{2i}<b_{2i+1},b_{2i}<b_{2i-1}$

       2、对于所有正整数i,满足$b_{2i}>b_{2i+1},b_{2i}>b_{2i-1}$

       问最多留下多少数

    以f[i]代表从1到i最后一次上升的长度

    以g[i]代表从1到i最后一次下降的长度

    递推。。。。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define int long long
    #define olinr return
    #define _ 0
    #define love_nmr 0
    #define DB double
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')
                f=-f;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^48);
            ch=getchar();
        }
        return x*f;
    }
    inline void put(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>9)
            put(x/10);
        putchar(x%10+'0');
    }
    int h[105050];
    int f[105050];
    int g[105050];
    signed main()
    {
        int n;
        n=read();
        for(int i=1;i<=n;i++)
            h[i]=read();
        f[1]=1;
        g[1]=1;
        for(int i=2;i<=n;i++)
        {
            if(h[i]>h[i-1])
                f[i]=g[i-1]+1;
            else
                f[i]=f[i-1];
            if(h[i]<h[i-1])
                g[i]=f[i-1]+1;
            else
                g[i]=g[i-1];
        }
        put(max(f[n],g[n]));
        olinr ~~(0^_^0)+love_nmr;
    }
  • 相关阅读:
    【C++日常】C++动态命名变量名
    两个整数相除
    Jsp页面跳转 接收时的乱码问题
    Reverse a singly linked list
    Java处理excel文件
    Navicat for mysql 破解
    EasyUi 分页 和 表格数据加载
    Spring 框架下Controller 返回结果在EasyUI显示
    svn ubuntu command(转载)
    Shiro Security
  • 原文地址:https://www.cnblogs.com/olinr/p/9549450.html
Copyright © 2020-2023  润新知