【ybt金牌导航1-2-5】【luogu P3287】优美玉米 / 方伯伯的玉米田
优美玉米 / 方伯伯的玉米田
题目链接:ybt金牌导航1-2-5 / luogu P3287
题目大意
有一个数组,你可以每次给一个区间里面的值加一,要你使得最后剩下的最长单调不下降子序列最长。
思路
首先, 我们会发现一个东西,就是选的区间的右端点一定是 \(n\)(也就是最右边)。
为什么呢?
因为你要构成最长不下降子序列,那就是要让右边更大,那既然要加区间,如果不移动到最右边,反而可能使得原来构成最长不下降子序列的地方被破坏,从而不是更优。
我们考虑弄出最朴素的方程,设 \(f_{i,j}\) 为 \(i\sim n\) 区间加 \(j\) 次在 \(1\sim n\) 能有的最长单调不下降子序列。
\(f_{i,j}=\max\limits_{l<i,j\leq m,a_i+j\geq a_l+m}{f_{l,m}}+1\)
那它有三个约束的条件,而且你枚举是 \(O(n^2k^2)\) 很明显超的很离谱。
那我们想到两个约束的条件可以用树状数组,那三个呢?
那我们考虑二维树状数组。
就是枚举两个,都 \(+\text{lowbit(i)}\) 或 \(-\text{lowbit(i)}\)。
那我们就从小到大枚举 \(f_i,j\) 的 \(i\) 以满足第一个条件,当然你还要枚举 \(j\)。因为你有可能搞查询的时候查询到了你当前枚举的 \(i\) 的地方,那你为了不会碰到,就可以从大到小枚举 \(j\)。剩下两个就树状数组来弄,但是因为树状数组不能搞 \(0\),但是你的 \(j\) 会有 \(0\),那你就需要把所有的 \(j\) 都加一。
然后就是正常的树状数组操作,答案就在枚举 \(i,j\),算出 \(f_{i,j}\) 的时候,找到所有的最大值。
代码
#include<cstdio>
#include<iostream>
using namespace std;
int n, k, ans, now, tree[6001][502], re, a[1000001];
void build(int x, int y, int num) {//二维树状数组操作
for (int nowx = x; nowx <= 6000; nowx += nowx & (-nowx))
for (int nowy = y; nowy <= k + 1; nowy += nowy & (-nowy))
tree[nowx][nowy] = max(tree[nowx][nowy], num);
}
int ask(int x, int y) {
re = 0;
for (int nowx = x; nowx; nowx -= nowx & (-nowx))
for (int nowy = y; nowy; nowy -= nowy & (-nowy))
re = max(re, tree[nowx][nowy]);
return re;
}
int main() {
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)//看现在加哪里
for (int j = k; j >= 0; j--) {//看加了多少
now = ask(j + a[i], j + 1) + 1;
ans = max(ans, now);
build(j + a[i], j + 1, now);//第二维全部加一,不然弄不了j=0的
}
printf("%d", ans);
return 0;
}
【ybt金牌导航1-2-5】【luogu P3287】优美玉米 / 方伯伯的玉米田的更多相关文章
- 【ybt金牌导航1-2-6】【luogu P2467】地精部落
地精部落 题目链接:ybt金牌导航1-2-6 / luogu P2467 题目大意 有一个排列,要使得每个位置要么都比两边高,要么比两边低. 而且一定要以一高一低的方式排列. 两边的只用比旁边的那个高 ...
- 【ybt金牌导航1-2-4】免费馅饼
免费馅饼 题目链接:ybt金牌导航1-2-4 题目大意 有一个直线,在某一个时刻有一个馅饼会出现在一些位置,有它的价值. 一个人一开始可以站在直线的任意地方,然后他每个时刻可以不移动,或向任意一边移动 ...
- 【ybt金牌导航1-2-3】折线统计
折线统计 题目链接:ybt金牌导航1-2-3 题目大意 在一个图上有一些点,保证任意两个点的横纵坐标都不相同. 要你选一些集合,按 x 坐标排序依次连接,会构成一些连续上升下降的折线,问你折线数量是 ...
- 【题解】金牌导航-高斯消元/Luogu P3232 游走
题目描述: 详细分析: 我们对于编号的分配,很明显可以发现如下的分配就是期望最小的:对经过的期望次数越大的边赋予更小的编号. 那么问题就转化为了怎么求一条边的经过的期望次数,我们发现边数非常大所以肯定 ...
- 【题解】Luogu P3287 [SCOI2014]方伯伯的玉米田
原题传送门 一眼就能看出来这是一道dp题 显而易见每次操作的右端点一定是n,每株玉米被拔高的次数随位置不下降 用f(i,j) 表示以第i 株玉米结尾它被拔高了j 次的最长序列长度. \(f(i,j)= ...
- 洛谷P3287 [SCOI2014]方伯伯的玉米田(树状数组)
传送门 首先要发现,每一次选择拔高的区间都必须包含最右边的端点 为什么呢?因为如果拔高了一段区间,那么这段区间对于它的左边是更优的,对它的右边会更劣,所以我们每一次选的区间都得包含最右边的端点 我们枚 ...
- P3287 [SCOI2014]方伯伯的玉米田
首先可以证明,一定存在一种最优解,每次选择的区间结尾都是 \(n\).因为如果某一个区间结尾不是 \(n\),将其替换成 \(n\) 仍然保持单调不下降.接着都按这个策略拔高玉米. 令 \(f_{i, ...
- 洛谷 P3287 - [SCOI2014]方伯伯的玉米田(BIT 优化 DP)
洛谷题面传送门 怎么题解区全是 2log 的做法/jk,这里提供一种 1log 并且代码更短(bushi)的做法. 首先考虑对于一个序列 \(a\) 怎样计算将其变成单调不降的最小代价.对于这类涉及区 ...
- 【ybt高效进阶2-4-3】【luogu P4551】最长异或路径
最长异或路径 题目链接:ybt高效进阶2-4-3 / luogu P4551 题目大意 给定一棵 n 个点的带权树,结点下标从 1 开始到 N.寻找树中找两个结点,求最长的异或路径. 异或路径指的是指 ...
随机推荐
- kubernets之节点和网络的安全保障策略
一 在pod中使用宿主节点的命名空间 1.1 在pod中使用宿主的网络命名空间 [root@node01 Chapter13]# cat pod-with-host-network.yml api ...
- 记录Js动态加载页面.append、html、appendChild、repend添加元素节点不生效以及解决办法
今天再优化blog页面的时候添加了个关注按钮和图片,但是页面上这个按钮和图片时有时无,本来是搞后端的,被这个前端的小问题搞得抓耳挠腮的! 网上各种查询解决方案,把我解决问题的艰辛历程分享出来,希望大家 ...
- 视图V_160M和表T_160M的维护
今天发现一个视图,通过SM30居然无法维护,这个视图就是V_160M,表为T_160M,是采购相关的系统消息, 不过别着急,有办法维护的,呵呵,看下面: 试一试OMCQ这个事物代码吧! 分享出来,给需 ...
- BAPI_MATERIAL_BOM_GROUP_CREATE创建BOM
天使用BAPI函数:BAPI_MATERIAL_BOM_GROUP_CREATE创建BOM组数据,过程中发现很多问题啊.总结如下: BOMGROUP VARIANTS 这两个参数必须要传 ...
- 前端基础功能,原生js实现轮播图实例教程
轮播图是前端最基本.最常见的功能,不论web端还是移动端,大平台还是小网站,大多在首页都会放一个轮播图效果.本教程讲解怎么实现一个简单的轮播图效果.学习本教程之前,读者需要具备html和css技能,同 ...
- 浅谈JavaScript代码性能优化2
一.减少判断层级 从下图代码中可以明显看出,同样的效果判断层级的减少可以优化性能 二.减少作用域链查找层级 简单解释下,下图中第一个运行foo函数,bar函数内打印name,bar作用域内没有name ...
- (11)-Python3之--os模块
1.模块介绍 os模块是路径处理模块,它提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...
- LR 场景中Windows资源配置设置
监视连接前的准备工作 1)进入被监视windows系统,开启以下几个服务Remote Procedure Call(RPC) .Rmote Resgistry.Network DDE.Server.W ...
- Spring AOP介绍与使用
Spring AOP介绍与使用 AOP:Aspect Oriented Programming 面向切面编程 OOP:Object Oriented Programming 面向对象编程 面向切面 ...
- Spark Dataset DataFrame 操作
Spark Dataset DataFrame 操作 相关博文参考 sparksql中dataframe的用法 一.Spark2 Dataset DataFrame空值null,NaN判断和处理 1. ...