状态定义是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. 怎么在手机上查看sqlite db

    在 从 百度应用 下载“SQLite编辑器(SQLite Editor)” 安装到手机上.前体是 手机已经Root(可以用360一键Root软件进行root).

  2. Loadrunner中web_custom_request使用场景

    其中有一段从服务器段动态返回的字符串需要重新提交给服务器(见红色标注) 录制自动生成的脚本是: web_submit_data("generateYfLstAction.do",  ...

  3. nodeAPI--TCP

    Node HTTP服务器是构建与Node TCP服务器之上的,即http.Server继承自net.Server; TCP特性: 面向连接的通信和保证顺序的传递: IP的协议是面向无连接,且数据包送达 ...

  4. Queuing

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission ...

  5. js网页换肤

    使网页背景颜色可选黄/粉 <html> <head> <meta charset="utf-8"> <meta name="ge ...

  6. POJ3189 Steady Cow Assignment(最大流)

    题目大概说,有n头牛和b块草地,每头牛心中分别对每块草地都有排名,草地在牛中排名越高牛安排在那的幸福度就越小(...),每块草地都能容纳一定数量的牛.现在要给这n头牛分配草地,牛中的幸福度最大与幸福度 ...

  7. White Rectangles[HDU1510]

    White Rectangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. 开学后,板刷usaco!

    我要开权限我要开权限我要开权限我要开权限我要开权限我要开权限我要开权限我要开权限 他们刷rank的太可恶了 没有usaco银组金组分类的oj太可恶了 没有usaco翻译的太可恶了 没有usaco数据的 ...

  9. Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]

    在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...

  10. winform学习之-----关于按键操作的一些小知识(如何获取焦点所在的当前控件)20160623

    1.设置整个窗体keydown事件的时候,要设置keyPreview=true; 2.获取当前拥有焦点的控件: 关于这个问题,自己也是纠结死了,在网上搜了好多相关的问题答案,搜出的结果是: //API ...