ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【考试总结】2022-06-04

2022-06-04 20:01:49  阅读:173  来源: 互联网

标签:06 04 lim 线段 mid 2022 长度 rm dis


将 \(1\sim n\) 中的偶数向半数自身连边,那么行程若干条链,每个 \(1\) 都需要使用上面行程的链或者链的一部分来进行填充

注意到链的长度和数量都非常有限,考虑使用高维 \(\rm DP\) 来解决这个问题,设 \(f_{i,c1,c2,c3,c4,c5,c6,\lim_1,\lim_2}\) 表示长度为 \(i\) 的链有 \(c_i\) 条,不能填的元素所在的链的长度分别为 \(\lim_1,\lim_2\)

转移考虑枚举断开的链的长度以及断开的是长度链的哪个部分,注意链可以正反填入,对应的不合法元素也不一样,注意长度为 \(1\) 的链被选中后 可能会造成两个元素不合法,这也就是为啥要开到九维

存储状态时将中间六个压缩起来,用类似哈希表的方式

预处理 \(f_{c,a,b}\) 表示从第 \(c\) 列的第 \(a\) 行走到第 \(b\) 行最少需要覆盖多少石子,\(|a-b|=1\) 时答案固定,否则需要正向反向做两遍 \(\rm DP\)

分治计算跨过区间中点 \(\rm mid\) 的答案,注意到起止点分处于中线两边时只会跨过一次中线,否则因为列数过于有限导致路线不优

仍然使用一个 \(\rm DP\) 来计算中 \(\rm (1/2/3,mid)\) 到 \((1/2/3,[l,mid])\) 的最短路以及 \(\rm (1/2/3,mid+1)\) 到 \((1/2/3,[mid+1,r])\) 的最短路,转移即枚举从上一列的哪行进入这列,需要使用上面说的 \(f\)

枚举起止点在哪行跨过了中线,最优决策下需要有该行 \(l\) 满足 $\rm dis(A,(l,mid))+dis((l,mid+1),B)\le dis(A,(l,1/2/3))+dis((1/2/3,mid+1),B) $

问题变成了二维偏序,在行标号小于钦定的最优决策行时将某一维权值减一来避免重复统计相等的情况即可

将网格图变成 \(\Theta(n+m)\) 个横向 & 纵向的线段,其中在横向转弯进入某横向线段后非转弯点的最短距离都相等

所以求出来到达每个横向线段最少需要多少次转向,到达纵向线段最少需要多少次转向再统计答案

前者可以使用可持久化线段树进行优化建图,即按行扫描,将每列的对应的线段标号放到主席树的叶子上,对于当前行的线段去可持久化线段树上做区间连边

连向真实线段的边带有 \(1\) 的权值,辅助边权值为 \(0\)

然后进行 \(01\rm BFS\) 即可得到源点到每个线段的最小转弯放置数量

之后扫描所有列,并使用线段树维护所有行在上文中求出来的结果,尝试使用列上的线段信息将交点的信息更新正确

容易发现存在交点的两条线段最短路至多差 \(1\) 那么维护最小值以及个数就能得到正确答案

标签:06,04,lim,线段,mid,2022,长度,rm,dis
来源: https://www.cnblogs.com/yspm/p/TestReview-20220604.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有