[USACO17FEB] Why Did the Cow Cross the Road II P [树状数组优化dp]

通俗易懂的图解二叉搜索树、AVL树和红黑树 搜索是一种很常见的需求,当数据较多时,如何找到目标对象时,即需要搜索查找。 那么如何快速找到目标呢,最朴素的思想就是暴力查找,一个一个对比。 显然,当数据量增大时,我们需要优化查找方法获取更快的查找速度,我们可以通过维护一个有序数组,从而实现二分查找,查找速度从O(n)降为O(longn)。 但是数组并不便于插入和删除,链表便成为了最好的选择。 既然是采用二分查找,那么不如直接按照查找的步骤维护一种数据结构,于是二叉搜索树出现了。 二叉搜索树的性质为: 若左子树不为空,则左子树上所有节点值都小于根结点值; 阅读详情

W h y   D i d   t h e   C o w   C r o s s   t h e   R o a d Why\ Did\ the\ Cow\ Cross\ the\ Road Why Did the Cow Cross the Road

题目描述见链接 .


正 解 部 分 \color{red}{正解部分} 正解部分

设 F [ i , j ] F[i, j] F[i,j] 表示 A A A 序列前 i i i 项, B B B 序列前 j j j 项 的最大匹配数,

  • i , j i,j i,j 不相连: F [ i , j ] = max ⁡ ( F [ i − 1 , j ] , F [ i , j − 1 ] ) F[i, j] = \max(F[i-1,j],F[i,j-1]) F[i,j]=max(F[i−1,j],F[i,j−1])
  • i , j i, j i,j 相连: F [ i , j ] = max ⁡ ( F [ i − 1 , j − 1 ] + 1 ) F[i, j] = \max(F[i-1,j-1]+1) F[i,j]=max(F[i−1,j−1]+1)

经典的最长公共子序列算法 .

考虑优化, 发现 i i i 与 j j j 相连当且仅当 ∣ A i − B j ∣ ≤ 4 |A_i-B_j| \le 4 ∣Ai​−Bj​∣≤4, 于是在 i i i 确定的情况下, j j j 最多只有 9 9 9 个可能的取值,

所以可以记下 B j B_j Bj​ 的位置 p o s B j pos_{B_j} posBj​​ 从小到大枚举 i i i, 再枚举 9 9 9 种可能的 B j B_j Bj​,
从 F [ i − 1 , 0   . . .   p o s B j − 1 − 1 ] + 1 F[i-1, 0 \ ...\ pos_{B_j-1}-1]+1 F[i−1,0 ... posBj​−1​−1]+1 转移过来, 使用 树状数组 优化 最大前缀 即可实现 O ( 9 × N log ⁡ N ) O(9\times N \log N) O(9×NlogN) .


实 现 部 分 \color{red}{实现部分} 实现部分

#include<bits/stdc++.h>
#define reg register

const int maxn = 100005;

int N;
int A[maxn];
int B[maxn];
int tmp[maxn];
int pos[maxn];

struct Bit_Tree{
        int v[maxn], lim;
        void Add(int k, int x){
                while(k <= lim){
                        v[k] = std::max(v[k], x);
                        k += k&-k;
                }
        }
        int Query(int k){
                if(k <= 0) return 0;
                int s = 0;
                while(k){
                        s = std::max(s, v[k]);
                        k -= k&-k;
                }
                return s;
        }
} bit_t;

int main(){
        scanf("%d", &N);
        for(reg int i = 1; i <= N; i ++) scanf("%d", &A[i]);
        for(reg int j = 1; j <= N; j ++) scanf("%d", &B[j]), pos[B[j]] = j;
        bit_t.lim = N;
        for(reg int i = 1; i <= N; i ++){
                int dlim = std::max(1, A[i]-4), ulim = std::min(N, A[i]+4);
                for(reg int j = dlim; j <= ulim; j ++) tmp[j] = bit_t.Query(pos[j]-1) + 1;
                for(reg int j = dlim; j <= ulim; j ++) bit_t.Add(pos[j], tmp[j]);
        }
        printf("%d\n", bit_t.Query(N));
        return 0;
}
ETAS工具导入Com Arxml修改步骤 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml文件,实现通讯协议栈的生成。通过Arxml导入相比于DBC来说,少了从DBC转为arxml的过程。而且arxml中能提供的信息也会更多。如果是DBC的话,很多信息(如PNC的映射,CANTP的配置等)都需要额外配置。不过还有连DBC都无法提供的,那就更麻烦了~ 阅读详情

相关推荐

SecureCRT 9.0最新版安装与激活全攻略(附驱动识别技巧)

本文提供SecureCRT 9.0最新版的详细安装与激活指南,并重点解析了嵌入式开发中串口连接的硬件驱动识别技巧。内容涵盖从安全获取软件、解决USB转串口驱动兼容性问题,到配置SSH与串口会话的完整流程,旨在帮助开发者和工程师高效部署并精通使用这款终端仿真利器。

star的博客 413

【USACO 2017 February Platinum】Why Did the Cow Cross the Road II 题解(DP+线段树 或 最长上升子序列)

Description Farmer John raises N breeds of cows (1≤N≤1051\leq N \leq 10^51≤N≤105), conveniently numbered 1…N. Some pairs of breeds are friendlier than others, a property that turns out to be easily characterized in terms of breed ID: breeds a and b are fri

CJZ的博客 767

​​EMC设计实战:BCI(大电流注入)硬件设计规范

LIN接口:集成TVS管(如PESD5V0S1BL)与共模电感,耐压等级≥20V(8kV HBM)。输入滤波:10μF电解电容(100kHz截止)+ 0.1μF陶瓷电容(10MHz截止)。​:全频段(1MHz-400MHz)注入200mA电流,LIN通信误码率<0.01%。对敏感电路(如传感器)采用隔离电源(如ADuM5000),隔离电压≥3kVrms。​:连续波(CW)与调幅波(AM,调制深度80%)组合,覆盖全频段干扰场景。​:选择低频段(1-100MHz)感量≥100μH的绕线电感,抑制共模电流。

m0_50833886的博客 1940

ZJNU 1902 Why Did the Cow Cross the Road II dp

Why Did the Cow Cross the Road IITime Limit: 3000MS Memory Limit: 3000K Total Submissions: 30 Accepted: 10 DescriptionFarmer John raises N breeds of cows (1≤N≤1000), conveniently numbered

enamor_AC的博客 435

PCIe信号眼图总是不开?手把手教你调CTLE和DFE参数(附实测波形对比)

本文详细解析了PCIe信号眼图调试中CTLE和DFE参数的优化方法,帮助硬件工程师解决眼图无法张开的问题。通过实际案例和步骤指导,介绍了如何调整CTLE直流增益和DFE抽头系数,提升接收端均衡器性能,确保信号完整性。

weixin_26805597的博客 218

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

[USACO17FEB]Why Did the Cow Cross the Road II S

题目描述 The long road through Farmer John's farm hascrosswalks across it, conveniently numbered(). To allow cows to cross at these crosswalks, FJ installs electric crossing signals, which light...

aoanping0730的博客 499

国产化操作系统shell常用脚本

国产操作系统常用脚本:统信、麒麟。

Reyn_观极 598

【bzoj4990】[Usaco2017 Feb]Why Did the Cow Cross the Road II

DescriptionFarmer John is continuing to ponder the issue of cows crossing the road through his farm, introduced in the preceding problem. He realizes that interaction between some pairs of breeds is

wang_sj的博客 481

硬核实战!Python爬虫从0到1完整版:爬取知乎热榜+回答内容(数据去重+Excel一键导出+避坑指南,零基础友好)

✔️ 适用人群:Python爬虫零基础、想练手实战爬虫、需要爬取知乎内容做数据分析、办公/学习素材整理的同学爬取知乎热榜全量数据(排名+标题+热榜链接+热度值) →自动跟进爬取每个热榜问题的回答内容(回答者昵称+赞同数+评论数+回答正文+发布时间) →数据清洗+智能去重→一键导出格式化Excel文件,所有功能一站式完成入门级难度,无复杂反爬破解、无分布式/代理池,纯requests请求+静态解析,新手能看懂、能运行、能修改;爬取速度快,热榜+回答全程仅需几十秒。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1461

Python全栈入门到实战【基础篇 19】函数进阶:默认参数、递归函数与偏函数应用

本文深入探讨Python函数进阶的三大核心知识:默认参数、递归函数与偏函数。针对默认参数,揭示了可变对象作为默认值的陷阱,提出使用None替代的方案;解析递归函数的三大要素(终止条件、递归调用、问题拆解),并通过阶乘和斐波那契数列示例演示实现方法,同时给出尾递归和缓存装饰器两种优化策略;最后介绍偏函数如何通过functools.partial固化参数简化调用。这些技巧能显著提升函数在复杂场景下的灵活性与复用性,帮助开发者编写更高效的Python代码。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3864

Why Did the Cow Cross the Road II - UPCOJ 3438 - 动态规划DP

题目:题目描述 Farmer John raises N breeds of cows (1≤N≤1000), conveniently numbered 1…N. Some pairs of breeds are friendlier than others, a property that turns out to be easily characterized in terms of bre

LucienShui 1269

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「前端可视化项目实战:智慧农业监控大屏开发详解」 「农作物可视化监控:用 Vue 和 ECharts 构建大屏应用」 「从零开始开发一个智慧农业数据大屏(代码+图表展示)」 「前端新手也能实现!智慧农业监控大屏开发教程」 「用 Vue 和 ECharts 搭建动态数据大屏:详细图文教程」 「学习前端大屏开发:

sky10100100的博客 1535

[USACO17FEB] Why Did the Cow Cross the Road II P (树状数组优化DP)

 题目大意:给你两个序列,你可以两个序列的点之间连边 要求:1.只能在点权差值不大于4的点之间连边 2.边和边不能相交 3.每个点只能连一次 设表示第一个序列进行到 i,第二个序列进行到 j,最多连的边数,容易得到方程: 不连边: 连边: 实际是这样的,每个位置如果想连边,就要从能连边的位置之前找最大值,即 直接转移不可取,由于最多只从9个位置转移,我们可以缩减一维,用记录b序列进...

guapisolo的博客 390

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

BZOJ 4990 [USACO17FEB] Why Did the Cow Cross the Road II P (树状数组优化DP)

题目大意:给你两个序列,你可以两个序列的点之间连边 要求:1.只能在点权差值不大于4的点之间连边 2.边和边不能相交 3.每个点只能连一次 设表示第一个序列进行到i,第二个序列进行到j,最多连的边数,容易得到方程: 不连边: 连边: 实际是这样的,每个位置如果想连边,就要从能连边的位置之前找最大值,即 直接转移不可取,由于最多只从9个位置转移,我们可以缩减一维,用记录b序列进行...

weixin_30344995的博客 120

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[USACO17FEB]Why Did the Cow Cross the Road II P

[USACO17FEB]Why Did the Cow Cross the Road II P树状数组·特殊的Dp更新方式题解:类似最长公共子序列的方程: f[i][j]=max( f[i-1][j], f[i][j-1] ) f[i][j]=max( f[i][j], f[i-1][j-1]+1 ) 当i、j可以匹配我们发现+1的位置很少,想办法只处理这些有贡献的。 也就是要快速推知f[i-

FTM's Blog 587

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[USACO17FEB] Why Did the Cow Cross the Road

这题真的是“写题五分钟,想题两小时”啊 我们考虑一个dpdpdp,我们用dpi,jdp_{i,j}dpi,j​表示第一排匹配到iii,第二排匹配到jjj,并且i,ji,ji,j相匹配 那么转移方程就是 dpi,j=max⁡{dpk,j}+1,k<i,bj∈[max⁡(1,ai−4),max⁡(n,ai+4)]dp_{i,j}=\max\{dp_{k,j}\}+1,k< i,b_j\in...

NephrenRuqInsania 253

luogu3627&bzoj4990 [USACO17FEB]Why Did the Cow Cross the Road II P

http://www.elijahqi.win/archives/1406 题目描述 Farmer John is continuing to ponder the issue of cows crossing the road through his farm, introduced in the preceding problem. He realizes that interaction...

Elijahqi 352

[USACO17FEB]Why Did the Cow Cross the Road I P

[USACO17FEB]Why Did the Cow Cross the Road I P逆序对题解:性质1:转一个就行。 性质2:设c[i]是a[i]在b数组中的位置,ans=c的逆序对数量。 性质3:把队首的转到队尾去,答案+=大于它的-小于它的。Code://null

FTM's Blog 595

bzoj4989&&luogu3656 [USACO17FEB]Why Did the Cow Cross the Road I P

http://www.elijahqi.win/archives/649 Description Why did the cow cross the road? We may never know the full reason, but it is certain that Farmer Joh n’s cows do end up crossing the road quite freq...

Elijahqi 355

bzoj 4993: [Usaco2017 Feb]Why Did the Cow Cross the Road II

题意:上下有两个长度为n、位置对应的序列A、B, 其中数的范围均为1~n。若abs(A[i]-B[j])<= 4,则A[i]与B[j]间可以连一条边。 现要求在边与边不相交的情况下的最大的连边数量。 n <= 10^4。题解:我太菜了,这种题都wa一次,最近都不知道怎么了TAT 直接dp,f[i][j]表示左列到i,右列到j的最大匹配。 然后f[i][j]=max(f[i][j],max(

fyc的博客 1225

[USACO17FEB] Why Did the Cow Cross the Road I P (树状数组求逆序对 易错题)

 题目大意:给你两个序列,可以序列进行若干次旋转操作(两个都可以转),对两个序列相同权值的地方连边,求最少的交点数 记录某个值在第一个序列的位置,再记录第二个序列中某个值 在第一个序列出现的位置 ,求逆序对数量即可 本以为是一道逆序对水题,结果被卡了20分。看了题解才恍然大悟,实际上,序列可以旋转 ≠ 序列成环,由于逆序对的特殊性(并不适用于环),故不能把一个序列单独旋转看成它们的相对移动,正...

guapisolo的博客 301

Why Did the Cow Cross the Road I P

P3656 [USACO17FEB]Why Did the Cow Cross the Road I P,用树状数组就可以做

欢迎您的光顾awa 401

[USACO17FEB]Why Did the Cow Cross the Road III S题解

题目链接 洛谷P3663 bzoj4997 思路 这道题要我们求遥远的牛,其实就是把道路当成障碍,去统计每个连通块有多少头牛,不在一个连通块的牛都是遥远的,可以用乘法直接计算。 在找连通块时用bfs搜索,暴力统计连通块。存图时可以用三维数组存它能否走到相邻的格子,但我用的是二维数组进行二进制压缩,可以省空间,也好看一些。 具体还有一些细节和优化,代码里有注释。 code: #include&lt;...

hht的博客 335

[USACO17FEB]Why Did the Cow Cross the Road II

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4990 [算法] 首先记录b中每个数的出现位置 , 记为P 对于每个ai , 枚举(ai - 4) - (ai + 4) , 将Pj从大到小加入序列 然后求最长上升子序列即可 , 详见代码 ...

481

Why Did the Cow Cross the Road II G & Why Did the Cow Cross the Road II P

Why Did the Cow Cross the Road II G & Why Did the Cow Cross the Road II P,没错,还是树状数组

欢迎您的光顾awa 235
上一篇: 中等的字符串 [Ac自动机, 矩阵乘法(max)]
下一篇: 红绿 [线段树分治, 并查集]
Zbr162
博客等级 码龄8年 12粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值