2022.11.02

2022.11.02

T1 P6503

单调栈维护 4 个值:令当前数为 i, 维护 i 往前第一个大于/小于 ai 的数的位置和 i 往后第一个大于/小于 ai 的数的位置 ,枚举每一个数的贡献即可,注意一下去重的细节(可以规定做出贡献的最小值为所有相同的最小数中位于区间最左侧的,最大值同理) 其实相当于之前某天清橙上的T1

T2 P4951

比较裸的 0/1分数规划,做过类似题目的话这题不难。
可以推出要使得答案 ans 合法,就要保证所有选出的路中 ci+tiansf
二分这个 ans 跑最小生成树就好了。

T3 P3509

倍增好题,让我更深刻地理解了倍增。(阿同时也有双指针的成分)
做的时候想到了 倍增 两个字,除此之外什么都没想出来。
首先在求 第i个位置跳1步到达的点 时,双指针(相当于一个区间)总是向后移动(或不移动),因为位置 i+1 到 当前 l 的距离总是在增大,双指针向后移动才有可能使得答案更优。
处理完这玩意就可以用倍增求答案了。
m 二进制分解,令 fi,j 表示 i 位置跳 2j 次后的位置(fi,0已求出),则有转移方程 fi,j=ffi,j1,j1。在 m 的二进制中“1”的对应位置将 f 更新到 ans 中就彳亍了。数组滚动一下,就会发现答案的更新特别像快速幂的求法。

T4 P7365

一道神奇的有关网格的DP(一些大佬称其为暴力DP)。
这里将 “I” 字母分为的三个部分称为第一,二,三部分。

做法:设 fi,j,k,l(l[1,3]) 表示第 i 行,当前在第 l 部分,区间 [j,k]的最大面积。
由于第二部分必须比第一部分短一截,在暴力的时候就得在枚举第一部分的 j,k 时枚举第二部分的 j,k,pia的一下 n4 了。
于是出现了一个小技巧:使用另一个数组 gi,j,k,l(l[1,2])
gi,jg,kg,1 记录 fi,jf,kf,1|jf[1,jg),kf(kg,m]的最大值,
gi,jg,kg,2 记录 fi,jf,kf,2|jf,kf(jg,kg)的最大值,
这样在不同部分的转移中就可以直接调用 g 数组而不用枚举 jg,kg 了。
最后我们会发现 i 这一维可以被轻松地压掉,但好像可以不压。

posted @   Cotsheep  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示