【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.寻找树中找两个结点,求最长的异或路径. 异或路径指的是指 ...
随机推荐
- 改进你的c#代码的5个技巧(四)
像每一篇文章一样,我会重复几行.我在我的Core i3 CPU.4GB主内存和Windows 7平台上测试了以下代码.如果你在不同的硬件配置或使用不同的平台,那么你的输出可能会随着我的输出屏幕而变化, ...
- kubernets之statefulset资源
一 了解Statefulset 1.1 对比statefulset与RS以及RC的区别以及相同点 Statefulset是有状态的,而RC以及RS等是没有状态的 Statefulset是有序的,拥 ...
- eCATT使用前的配置
如果想在SAP中使用eCATT,必须做一下相关的配置才行,下面简单介绍这几步:1.SM30,输入表T000,然后点击维护,或者是进入事物SCC4,进入对应的clint属性编辑视图下,将CATT and ...
- 【转】自定义ALV控件的工具条按钮
1 CLASS lcl_event_receiver DEFINITION DEFERRED. 2 3 DATA: itab TYPE TABLE OF spfli, 4 wa TYPE spfli. ...
- STM32F207时钟系统解析
在前几天的文章<晶振原理解析>中介绍了晶振如何产生时钟的,板子使用的是25M无源晶振,下文将介绍STM32F207的时钟系统如何将25M晶振时钟转换为120M系统主频时钟的. 01.时钟系 ...
- 六个你不知道的PR快捷键,拯救你的剪辑效率
5G时代到来,会剪辑视频的人,无论在校园还是未来步入职场都很吃香.对于普通人来说,视频处理也成为了一个通用技能.PR是我们大多数人剪辑中,经常会用到的剪辑工具,之前的文章中已经给大家总结了pr的一些提 ...
- 虚拟化kvm的搭建
虚拟化, 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 ,在一台计算机上同时运行多个逻辑计算机,每台逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不 ...
- windows ping bat脚本
参考百度链接:https://zhidao.baidu.com/question/577024998.html 要求:1.从同级目录下读取iplist.txt文件内的ip/域名列表(每行一个):2.对 ...
- 知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838
知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838
- 请不要继续将数据库称为 CP 或 AP - 掘金 https://juejin.im/post/6844903878102614030
请不要继续将数据库称为 CP 或 AP - 掘金 https://juejin.im/post/6844903878102614030