菱形计数与最值问题
题面
你有一个边长为
的正六边形。它被划分成了若干个边长为 的小等边三角形。
我们希望通过合并若干对有公共边的三角形,把这个六边形变成若干个边长为的菱形的划分。对于每对三角形之间,它们合并有一个代价,问最小的总代价是多少。
例如下面的图,最佳划分方案是图中绿色的边作为每个菱形的边界。
这是最值的题面,还有一个题是求方案数的题目,即:求将边长为
转化为三维问题
相当于一个
这样就看起来非常直观了,并且每一种放置方案和每一个菱形的划分或者三角形的合并的方案是一一对应的。比如说我们可以看第一个图,那么他三角形合并的方案就是讲图中所有红线两端的三角形合并到一起:
而题目给的那个图就像是这个的第二行第三个图:
转化为不相交路径问题
将这个问题再转化:从右上角的所有格子往左下角的所有格子对应着走,且路径不相交。
就好像右边的地势比左边要高,我们正在下山,每一个路径直走每个小正方体的上面和前面,而不走他的侧面,显然这种路径的每一种方案和题目所述的合法方案也是对应的——把每条路径的下方点满方块而其余的地方都不填。
此时如果你要求方案数的话就可以直接
更具体的可以看 这篇博客
本题的解决方案
但是这个题你要求的是一个最小代价,我们考虑建图费用流。把每个三角形当做点,题目给出的代价当做相邻的那两个三角形对应点之间的边权(显然边的容量都是
我们把这些边分成两类,一类是上下两个三角形之间的边,即图中红色的边,另一类是其他蓝色的边(
我们假设每个红色边权的菱形都选了(这显然不合法),然后我们往里填一些小正方形,每一个填不填相当于是破坏了一些竖着的菱形,新添加了一些横着的菱形。
那么我们就可以最开始时把所有红色的边权加到答案里,然后将红色边的边权取负数,蓝色的还是保持正数不变,然后跑
注意:跑
条流量是因为我们要找 条路径。
我们同时还要求有流量的路径不交,由于这个图边的容量都是所以边肯定是不交的。
而且由于这个图的特殊性,一个点最多向外连三条边,所以只要边不交那点肯定不交,因为如果你只相交一个点而边不交的话至少需要四条边,在这个题目中不存在这样的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探