状态定义是dp中非常重要的,可以直接影响到效率,如此题,第一种思路是:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
struct node {
int high, value;
bool operator < (const node &i) const{
return (this->value < i.value);
}
};
int main() {
int n;
scanf("%d", &n);
int fl[maxn];
for(int i = 1; i <= n; i++) scanf("%d", &fl[i]);
int f[maxn], g[maxn];
priority_queue<node> pf, pg;
f[1] = 1; g[1] = 1;
pf.push({fl[1], f[1]}); pg.push({fl[1], g[1]});
for(int i = 2; i <= n; i++) {
node x = pf.top();
node y = pg.top();
pf.pop(); pg.pop();
int cnt = 0;
while(x.high <= fl[i] && cnt < pf.size()) {
node e = pf.top(); pf.pop();
pf.push(x); x = e; cnt++;
}
cnt = 0;
while(y.high >= fl[i] && cnt < pg.size()) {
node e = pg.top(); pg.pop();
pg.push(y); y = e;cnt++;
}
f[i] = 1; g[i] = 1;
if(x.high > fl[i]) g[i] = x.value + 1;
if(y.high < fl[i]) f[i] = y.value + 1;
pf.push({fl[i], f[i]});
pg.push({fl[i], g[i]});
pf.push(x);
pg.push(y);
}
int ans = 0;
for(int i = 1; i <= n; i++) {
ans = max(ans, f[i]);
ans = max(ans, g[i]);
}
cout << ans;
}

定义f[i]为以i结束,加上优先队列优化,很麻烦,也容易被卡掉,复杂度不稳定,从O(nlogn)~O(n2)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int main() {
int n;
scanf("%d", &n);
int fl[maxn];
for(int i = 1; i <= n; i++) scanf("%d", &fl[i]);
int f[maxn], g[maxn];
f[1] = 1; g[1] = 1;
for(int i = 2; i <= n; i++) {
if(fl[i] > fl[i-1]) {
f[i] = max(f[i-1], g[i - 1]+1);
g[i] = g[i-1];
}
else if(fl[i] < fl[i-1]) {
f[i] = f[i-1];
g[i] = max(g[i-1], f[i-1] + 1);
}
else {
f[i] = f[i-1];
g[i] = g[i-1];
}
}
cout << max(f[n], g[n]);
}

定义f[i]为前i个数,不需要优化,效率高,复杂度降低到了O(n)!

算法真神奇。

P1970 花匠的更多相关文章

  1. Luogu P1970 花匠

    Luogu P1970 花匠 本质上就是找最长的波浪序列. 因为考虑到第一个必选,所以可以让$lst=h[1]$. 此外,注意到$n=1$是要特判,其他情况下显然$ans\geq 2$,所以把$dir ...

  2. DP练习题——洛谷P1970花匠

    目录 题目描述: 输入输出格式: 输入格式: 输出格式: 输入输出样例: 输入样例: 输出样例: 题目分析: 解法一: 解法二: 结语: 题目描述: 洛谷\(P1970\) 花匠栋栋种了一排花,每株花 ...

  3. [NOIP2013] 提高组 洛谷P1970 花匠

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

  4. Luogu P1970 花匠 【线性Dp】 By cellur925

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

  5. 洛谷 P1970 花匠 —— DP

    题目:https://www.luogu.org/problemnew/show/P1970 普通的DP,f[i][0/1] 表示 i 处处于较小或较大的长度: 注意:1.树状数组向后 query 时 ...

  6. 洛谷——P1970 花匠

    https://www.luogu.org/problem/show?pid=1970 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走, ...

  7. 洛谷 P1970 花匠

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

  8. 洛谷P1970 花匠

    传送门 首先可以知道,如果一个序列是连续上升的,那么只需要取这一个序列中最高的元素即可,因为取其它的不能保证大于后面的.连续下降的序列同理.而这些恰好就是波峰和波谷. 所以遇到 $ j $ 比之前的 ...

  9. 洛谷P1970 花匠(dp)

    题意 题目链接 Sol 直接用\(f[i][0/1]\)表示到第\(i\)个位置,该位置是以上升结尾还是以下降结尾 转移的时候只需枚举前一个即可 #include<cstdio> #inc ...

随机推荐

  1. mysql封装类

    <?php ;         ;         $cnt = mysql_num_rows($rsPtr);         ;         ) {             $id =  ...

  2. 比较StringBuffer字符串内容是否相等?

    为什么会有这个问题呢?首先得看看String和StringBuffer的比较区别: ==只能比较两个字符串的内存地址是否一样,不能比较字符串内容: String的equals方法因为重写了Object ...

  3. git提交报异常,fatal: The remote end hung up unexpectedly

    转自:http://liucanwen.iteye.com/blog/2021601 早上提交代码到 oschina代码库时,报了这个错误: fatal: The remote end hung up ...

  4. hdu 4586 Play the Dice 概率推导题

    A - Play the DiceTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  5. 建模算法(五)——图与网络

    (一)图与网络的基本概念 一.无向图 含有的元素为顶点,弧和权重,但是没有方向 二.有向图 含有的元素为顶点,弧和权重,弧具有方向. 三.有限图.无限图 顶点和边有限就是有限图,否则就是无限图. 四. ...

  6. XmlPull

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 创建解析器. XmlPullParser parser = ...

  7. storm环境搭建

    备注——使用: 1.单机版本: 启动zkServer.nimbus.supervisor.ui服务: zkServer.sh start zkServer.sh status #查看zkserver是 ...

  8. 【wikioi】1907 方格取数3(最大流+最大权闭合子图)

    http://www.wikioi.com/problem/1907/ 这题我一开始想到的是状压,看到n<=30果断放弃. 然后也想到了黑白染色,然后脑残了,没想到怎么连边. 很简单的一题 黑白 ...

  9. oracle系列--第四篇 Oracle的卸载

    对于oracle的卸载,是一件相对麻烦的事情,不像其他软件那样,我们可以根据卸载向导,就可以方便快捷地卸载软件. oracle的卸载,我们要涉及到修改注册表,重启计算机等操作. 我们有些时候有必要卸载 ...

  10. 搭建你的第一个Django应用程序

    首先你要确保你机器上面安装了python:Python开发_python的安装 python的相关学习资料:http://www.cnblogs.com/hongten/tag/python/ 其次, ...