【算法】DP||贪心

【题解】

(1)动态规划:

令f[i][0..1]为两种条件下前i株花的最大保留数量,状态转移方程:

f[i][0]=max(f[j][1]+1) (j=i-1...1)(h[i]>h[j])

f[i][1]=max(f[j][0]+1) (j=i-1...1)(h[i]<h[j])

初始化:f[i][0]=f[i][1]=1,这样时间复杂度是O(n^2)。

由于题目的数据范围中有一句话:所有的h_i随机生成,所有随机数服从某区间内的均匀分布。

所以加个优化,因为f[i][0](i=1...n)和f[i][1](i=1...n)存在单调性(不下降),即f[x][0]>=f[y][0](x>y),f[x][1]>=f[y][1](x>y)

所以在状态转移枚举j时,当f[i][0]和f[i][1]都>1(大于初始值)时,就可以不用再向前找j而是直接跳向下一个i。

优化后可以通过所有数据(AC)。

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int f[maxn][],h[maxn],n;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&h[i]);
f[i][]=;f[i][]=;
}
for(int i=;i<=n;i++)
for(int j=i-;j>=;j--)
{
if(h[i]>h[j])f[i][]=max(f[i][],f[j][]+);
if(h[i]<h[j])f[i][]=max(f[i][],f[j][]+);
if(f[i][]>&&f[i][]>)break;//剪枝优化,单调性
}
printf("%d",max(f[n][],f[n][]));
return ;
}

(2)贪心

学自:http://tieba.baidu.com/p/2714238975

先把序列中相邻的相同元素删剩一个(去重),然后在序列中寻找所有满足a[i-1]<a[i]>a[i+1]或者a[i-1]>a[i]<a[i+1]的元素,这样的元素个数即答案。

解释:去重后的序列就是在不断波动,因此这两种元素一定会交替出现,而相邻的这两种元素中间的一段,这一段必然是单调递增或者单调递减的,因此最多选择两个元素,而选择两个端点就必然是最优的。

这样时间复杂度是O(n)。

#include<cstdio>
int a[],b[],n,ans,tot;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
b[(tot=)]=a[];
for(int i=;i<=n;i++)
if(a[i]!=b[tot])b[++tot]=a[i];
ans=;//1和n
for(int i=;i<tot;i++)
if((b[i]<b[i-]&&b[i]<b[i+])||(b[i]>b[i-]&&b[i]>b[i+]))ans++;
if(tot==)ans=;if(tot==)ans=;
printf("%d",ans);
return ;
}

【NOIP】2013提高组 花匠(摆花)的更多相关文章

  1. noip 2013 提高组 Day2 部分题解

    积木大赛: 之前没有仔细地想,然后就直接暴力一点(骗点分),去扫每一高度,连到一起的个数,于是2组超时 先把暴力程序贴上来(可以当对拍机) #include<iostream> #incl ...

  2. NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对

    描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...

  3. NOIP 2013提高组day 1 T 1转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推 ...

  4. NOIP 2013 提高组 day2 积木大赛

      积木大赛 描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第

  5. noip 2013 提高组 day1

    1.转圈游戏: 解析部分略,快速幂就可以过 Code: #include<iostream> #include<fstream> using namespace std; if ...

  6. NOIP 2013 提高组 洛谷P1967 货车运输 (Kruskal重构树)

    题目: A 国有 nn 座城市,编号从 11 到 nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情 ...

  7. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  8. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】

    /*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...

  9. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

随机推荐

  1. 什么是BCL

    原文: 原文:https://www.cnblogs.com/1996V/p/9037603.html 什么是BCL 当你通过VS创建一个项目后,你这个项目就已经引用好了通过.NET下的语言编写好的一 ...

  2. ubuntu中下载sublime相关问题

    1.SublimeText3的安装 在网上搜索了一些ubuntu下关于sublime-text-3安装的方法,在这里针对自己尝试的情况进行反馈: 方法一(未成功): 在终端输入以下代码: sudo a ...

  3. TCP系列04—连接管理—3、TCP连接的半打开和半关闭

    在前面部分我们我们分别介绍了三次握手.四次挥手.同时打开和同时关闭,TCP连接还有两种场景分别是半打开(Half-Open)连接和半关闭(Half-Close)连接.TCP是一个全双工(Full-Du ...

  4. Debian 7 amd64 + fbterm + ucimf

    前段时间,显示器出了问题,导致Debian下只有终端显示正常,桌面显示效果很是摇晃模糊.遂起了念头,能不能在终端下就能完成日常的工作. google了很久,终于知道fbterm可以在终端下显示中文,加 ...

  5. C# WebBrowser控件详解

     作者:827969653     0.常用方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表 ...

  6. Sass的命令编译

    [Sass]命令编译 命令编译是指使用你电脑中的命令终端,通过输入 Sass 指令来编译 Sass.这种编译方式是最直接也是最简单的一种方式.因为只需要在你的命令终端输入: 单文件编译: sass & ...

  7. textarea怎么解析html代码,从而实现一个可高亮的输入框

    效果: 思路: 让一个div浮动在textarea上,样式和位置保持完全一致,textarea负责输入,div负责高亮显示 代码: .vue <template> <div clas ...

  8. 内核blackhole

    1) 当arp表项不存在的时候,数据包等待表项存在了再发,还是直接把数据包给丢掉; 2)如果网络目的地址不可达,是在那一层把数据丢弃,再是路由层就判断还是arp层呢?

  9. perf打印调用栈的过程

    perf_prepare_sample-->perf_callchain-->get_perf_callchain 上面的调用栈会使用 perf_event_output--> 0x ...

  10. [OS] 操作系统-进程线程-经典面试笔试题

    题目转自:http://blog.csdn.net/morewindows/article/details/7392749 ·线程的基本概念.线程的基本状态及状态之间的关系? 线程,有时称为轻量级进程 ...