题目链接

算法:

为了保证DP的正确与方便,这里先提供一个结论:每次操作都一定要拔高第n棵玉米。

以下引用NS·YJD大佬的一篇博客的证明:

首先无论操作区间在哪里,如果区间两边存在玉米,那么这些玉米与区间内玉米拔高后的相对高度关系只有3种情况:1.原本区间内比它们高的玉米还是比它们高。2.原本区间内比它们矮的玉米不再比它们矮。3.原本区间内比它们矮的玉米还是比它们矮。

对于区间左边而言:

这三种情况都不会减少初始排列中已存在的最长不下降序列的长度,并且有可能使它增长

对于区间右边而言:

这三种情况都不会增加初始排列中已存在的最长不下降序列的长度,并且有可能使它减少

如此一来我们就可以发现,要想得到最长不下降序列,区间的右边不存在玉米的情况一定是最优解。

由此,我们可以设为以第i个玉米高度为结尾,且第i个玉米拔高j次的最长上升子序列的长度。

         所以状态转移方程即为,(此时“,"表示“且”)

         转移我们则可以用二维树状数组维护前缀最大值(相当于我们将的值转化为的值,然后求中的最大值)。

注意:由于j的值可以为0,在作为树状数组的下标中,我们修改与查询就可以把第二位坐标+1。

所求答案一目了然吧。。。。。

Code:

#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define rep2(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
template<typename T> void read(T &num){char c=getchar();num=0;T f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){num=(num<<3)+(num<<1)+(c^48);c=getchar();}num*=f;
}
template<typename T> void qwq(T x){if(x>9)qwq(x/10);putchar(x%10+'0');
}
template<typename T> void write(T x){if(x<0){x=-x;putchar('-');}qwq(x);putchar('\n');
}
template<typename T> void chkmax(T &x,T y){x=x>y?x:y;}int n,k,sx;
int co[10010];int tree[6010][510];
inline int lowbit(int x){return x&(-x);}
inline void change(int x,int y,int w){while(x<=sx+k){int pos=y;while(pos<=k+1){chkmax(tree[x][pos],w);pos+=lowbit(pos);}x+=lowbit(x);}return;
}
inline int query(int x,int y){int ans=0;while(x){int pos=y;while(pos){chkmax(ans,tree[x][pos]);pos-=lowbit(pos);}x-=lowbit(x);}return ans;
}int main(){read(n);read(k);sx=0;rep(i,1,n){read(co[i]);chkmax(sx,co[i]);}rep(i,1,n){rep2(j,k,0){change(co[i]+j,j+1,query(co[i]+j,j+1)+1);}}write(query(sx+k,k+1));return 0;
}

[SCOI2014]方伯伯的玉米田相关推荐

  1. bzoj 3594: [Scoi2014]方伯伯的玉米田

    3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1399  Solved: 627 [Submit][ ...

  2. [bzoj 3594] [Scoi2014]方伯伯的玉米田

    [bzoj 3594] [Scoi2014]方伯伯的玉米田 Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为 ...

  3. [SCOI2014]方伯伯的玉米田 //二维树状数组优化DP

    题目: 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩 ...

  4. bzoj3594 [Scoi2014]方伯伯的玉米田

    题目链接 二维树状数组优化DP DP状态很容易想到:dp[i][j]表示到第i颗玉米,用了j次提升,最多保留多少: 转移: dp[i][j]=dp[k][j]+1(k<=i&&a ...

  5. bzoj3594[Scoi2014]方伯伯的玉米田

    http://www.lydsy.com/JudgeOnline/problem.php?id=3594 题目就是问你至多操作K次后的最长上升子序列. 首先,我们会得到一个结论:每次操作区间的右端点一 ...

  6. 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)

    传送门 题意咕咕咕 思路:直接上二维bitbitbit优化dpdpdp即可. 代码: #include<bits/stdc++.h> #define N 10005 #define K 5 ...

  7. SCOI2014 方伯伯的玉米田 题解

    可能其它还没写完的几篇随笔要搁一会儿,反正先写写题解 \(1-n\)的一个序列,值分别为\(a[1]\).\(a[2]...a[n]\),最多可进行\(K\)次操作,每次操作可以使\(l-r\)区间内 ...

  8. P3287 [SCOI2014]方伯伯的玉米田

    原题链接 数据结构优化DP 前置知识:二维树状数组 e.g.https://www.luogu.com.cn/problem/P4514 思路如下: 代码如下: #include <cstdio ...

  9. 【BZOJ3594】方伯伯的玉米田(SCOI2014)-DP+二维树状数组

    测试地址:方伯伯的玉米田 做法:本题需要用到DP+二维树状数组. 首先,我们发现每次拔高的区间都是一个后缀.这个自己画一画就大概能证出来了. 那么我们就有了一个状态定义:令 f(i,j) f ( i ...

最新文章

  1. window 10 系统 部分软件打开图标的修改
  2. 链表问题2——在单链表中删除倒数第K个节点
  3. 一文快速入门分库分表中间件 Sharding-JDBC
  4. Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map MapRowKey, SortedMapColumnKey, ColumnValue...
  5. 树莓派该文件名_树莓派学习笔记(2):常用linux命令
  6. Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
  7. Service startService方式的服务
  8. 模型集成01-Bagging/Boosting/Stacking
  9. Elasticsearch 高并发写入优化的开源协同经历 | 技术头条
  10. 滴滴否认上海团队解散;雄安超前布局 5G;小米拆分独立品牌 | 极客头条
  11. 45. Use member function templates to accept all compatible types.
  12. CLion安装 + MinGW 配置 + Opencv安装
  13. 计算机组装维修中级试题,维修电工中级培训考试题及答案
  14. ICPC冠军教练亲自授课 字节跳动ICPC冬令营全球招募50支受训队
  15. JavaSE实战项目:飞翔的小鸟(完整版)
  16. java 模板 word转pdf 可分页 带图片
  17. Redmi K20 Pro 编译 PixelExperience
  18. OPA277/OPA2277/OPA4277 High Precision Operational Amplifiers 高精度运放
  19. 面向对象的讨论-2022年5月4日
  20. 使用J-Link打印日志

热门文章

  1. 十七 SQL ALTER 与 AUTO INCREMENT
  2. matlab求点,MATLAB求两点中点
  3. linux 文件md5,Linux下计算文件的MD5值
  4. 叠片过滤器:叠片过滤器使用注意事项
  5. bind9 dlz mysql_源码安装Bind 9.10 正式版 开启DLZ数据库支持 和 数据库view查询
  6. 小谢同学的C语言之路————第一章 初遇C语言 第二集 数据类型
  7. 通信工程/电子信息工程 保研夏令营/预推免流程分析
  8. 2023年全国最新二级建造师精选真题及答案2
  9. 微信小程序开通直播的条件
  10. 老版java奇缘幻境,老版奇缘幻境1