状态定义是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. wp8 导航方法

    全局跳转 (App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Tools/SpatialQueryCha ...

  2. java.lang.NoClassDefFoundError: org/apache/avro/ipc/Responder

    文章发自:http://www.cnblogs.com/hark0623/p/4170174.html  转发请注明     java.lang.NoClassDefFoundError: org/a ...

  3. eclipse集成maven3后,创建java项目详细图解

    1.创建一个Java项目 1)File--->New--->Other--->Maven--->Maven Projet 2)选择maven-archetype-quickst ...

  4. 5.post上传和压缩、插件模拟请求

      gzip gzip一种压缩方式,或者是文件形式,它主要用于网络传输数据的压缩 gzip压缩好不好用 浏览器:网速一定.内容越小.请求响应的速度是不是更快 手机server:返回数据类型是json/ ...

  5. css 层叠样式表

    css选择器 派生选择器 根据其元素在其上下文关系来定义样式 <style type="text/css">body{ font-size:12px; color:re ...

  6. LightOJ1079 Just another Robbery(DP)

    题目大概是抢劫银行,每家银行都有一个收益和一个被抓的概率,求在被抓概率小于P的条件下能获得的最大收益. dp[i][j]表示抢劫前i家银行收益为j被抓的最小概率 dp[0][0]=0 dp[i][j] ...

  7. WPF 碰撞检测

    have tested this, it worked, at least for me var x1 = Canvas.GetLeft(e1); var y1 = Canvas.GetTop(e1) ...

  8. 【POJ】2954 Triangle(pick定理)

    http://poj.org/problem?id=2954 表示我交了20+次... 为什么呢?因为多组数据我是这样判断的:da=sum{a[i].x+a[i].y},然后!da就表示没有数据了QA ...

  9. HDU 4666 Hyperspace(曼哈顿距离)

    题目链接 这是HDU第400个题. #include <cstdio> #include <cstring> #include <set> #include < ...

  10. vim molokai配色方案(调过)

    " Vim color file " " Author: Tomas Restrepo <tomas@winterdom.com> " " ...