zoukankan      html  css  js  c++  java
  • [noip2013]花匠

    花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。
    具体而言,栋栋的花的高度可以看成一列整数h1, h2, … , hn。设当一部分花被移走后,剩下的花的高度依次为g1, g2, … , gm,则栋栋希望下面两个条件中至少有一个满足:
    条件 A:对于所有的1 ≤ i ≤ m/2,g2i > g2i-1,且g2i > g2i+1;
    条件 B:对于所有的1 ≤ i ≤ m/2,g2i < g2i-1,且g2i < g2i+1。
    注意上面两个条件在m = 1时同时满足,当m > 1时最多有一个能满足。
    请问,栋栋最多能将多少株花留在原地。

    ::点击图片在新窗口中打开::

     题过程:

    读了一分钟题后,发现这是个dp,然后构思第一种方法:单调队列二分优化dp

    但我发现这样的实现比较复杂。很可能在题目中有一些我没有发现的条件,造成了这种情况;

    基本构思完成后,我去看题解:

    贪心;

    分析后,发现这里的dp实际上会形成许多无用的状态,这里的贪心就是一种神奇的优化;

    我写完这道题后的感觉非常不好;

    实际题意是在原序列中求一个最长的波浪形的序列,贪心足矣;

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<iomanip>
    #include<map>
    #include<set>
    #include<vector>
    #include<ctime>
    #include<cmath>
    #define LL long long 
    using namespace std;
    #define LL long long 
    #define up(i,j,n) for(int i=(j);(i)<=(n);(i)++)
    #define max(x,y) ((x)<(y)?(y):(x))
    #define min(x,y) ((x)<(y)?(x):(y))
    #define FILE "1"
    const int maxn=101000,mod=99999997;
    int read(){
        int x=0;bool flag=0;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')flag=1;ch=getchar();}
        while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
        return flag?-x:x;
    }
    int n;
    int a[maxn];
    int f[maxn][2];
    int main(){
        scanf("%d",&n);
        up(i,1,n)a[i]=read();
        f[1][1]=f[1][0]=1;
        up(i,2,n){
            if(a[i]>a[i-1])f[i][1]=max(f[i-1][1],f[i-1][0]+1),f[i][0]=f[i-1][0];
            if(a[i]<a[i-1])f[i][1]=f[i-1][1],f[i][0]=max(f[i-1][0],f[i-1][1]+1);
            if(a[i]==a[i-1])f[i][1]=f[i-1][1],f[i][0]=f[i-1][0];
        }
        cout<<max(f[n][1],f[n][0])<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    [iOS]UIDynamicAnimator动画
    [iOS]被忽略的main函数
    [iOS]app的生命周期
    vue 封装http请求时错误信息提示使用element-ui message,只提示一次
    angular8 Vue 导出excel文件
    python3 tornado api + angular8 + nginx 跨域问题
    ubutu tornado python3.7.5 nginx supervisor 部署web api
    angular cli 反向代理实现跨域
    angular8自定义管道、指令以及获取dom值
    angular cli 使用echarts
  • 原文地址:https://www.cnblogs.com/chadinblog/p/5946763.html
Copyright © 2011-2022 走看看