首页 > 其他分享 >菱形计数与最值问题

菱形计数与最值问题

时间:2024-12-20 12:09:17浏览次数:3  
标签:方案 格子 边权 计数 菱形 三角形 六边形 最值

题面

你有一个边长为 \(n\) 的正六边形。它被划分成了若干个边长为 \(1\) 的小等边三角形。
我们希望通过合并若干对有公共边的三角形,把这个六边形变成若干个边长为 \(1\) 的菱形的划分。对于每对三角形之间,它们合并有一个代价,问最小的总代价是多少。
例如下面的图,最佳划分方案是图中绿色的边作为每个菱形的边界。


这是最值的题面,还有一个题是求方案数的题目,即:求将边长为 \(a,b,c\) 的正六边形分解成若干小菱形的方案数。

转化为三维问题

相当于一个 \(a\times b\) 的网格,每个格子上可以堆至多 \(c\) 个方块,并且每个格子的方块数量不能超过它左边和上面的格子的方块数量。

这样就看起来非常直观了,并且每一种放置方案和每一个菱形的划分或者三角形的合并的方案是一一对应的。比如说我们可以看第一个图,那么他三角形合并的方案就是讲图中所有红线两端的三角形合并到一起:

而题目给的那个图就像是这个的第二行第三个图:

转化为不相交路径问题

将这个问题再转化:从右上角的所有格子往左下角的所有格子对应着走,且路径不相交。



就好像我们的每一个路径直走每个小正方体的上面和前面,而不走他的侧面,显然这种路径的每一种方案和题目所述的合法方案也是一一对应的。
此时如果你要求方案数的话就可以直接 \(LGV\) 引理解决。

本题的解决方案

但是这个题你要求的是一个最小代价。我们考虑建图费用流,把每个三角形当做点,题目给出的代价当做相邻的那两个三角形对应点之间的边权(显然边的容量都是 \(1\))。

我们把这些边分成两类,一类是上下两个三角形之间的边,即图中红色的边,另一类是其他蓝色的边(\(S,T\) 是源点和汇点,他们向六边形一组对边上对应的点连费用是 \(0\) 的边)。
我们假设每个红色边权的菱形都选了(这显然不合法),然后我们往里填一些小正方形,每填一个相当于是破坏了一些竖着的菱形,新添加了一些横着的菱形。
那么我们就可以最开始时把所有红色的边权加到答案里,然后将红色边的边权取负数,蓝色的还是保持正数不变,然后跑 \(n\) 条最小费用的流量,再加上前面所有红色边的边权和就是答案。

注意:跑 \(n\) 条是因为我们要找 \(n\) 条路径。
我们同时还要求有流量的路径不交,由于这个图边的容量都是 \(1\) 所以边肯定的不交的。
而且由于这个图的特殊性,一个点最多向外连三条边,所以只要边不交那点肯定不交,因为如果你只相交一个点而边不交的话至少需要四条边,在这个题目中不存在这样的情况。

标签:方案,格子,边权,计数,菱形,三角形,六边形,最值
From: https://www.cnblogs.com/programmingysx/p/18618989

相关文章

  • 容斥原理+组合计数note
    看课笔记:https://www.bilibili.com/video/BV1G3411h7f5/?spm_id_from=333.337.search-card.all.click&vd_source=47c0221101e188411183012cce9b216c讲的真的很好,但是我是不会去看普林斯顿数学指南的()枚举原理+加法原理+乘法原理枚举基本定理:找到对应的一一映射加法原理:集合加法......
  • PLC编程实例3—计数器应用
    计数器应用(加计数、累计计数、24时钟)1.产品日产量测定(加计数)【功能】生产线可能停电或休息关掉电源,重新开始生产后需从停电前的记录开始对产品进行计数计数到达指定数量时,目标完成指示灯亮,提醒工作人员做好记录按下归零按钮,产品重新计数【I/O表】PLC装置控制说明X0......
  • VHDL时序电路:D触发器/十进制加减可逆计数器/偶数分频器/位移寄存器
    时序电路概述什么是时序电路与时序电路相对的是组合逻辑电路,其没有记忆功能,输出取决于输入而时序电路有记忆功能,下一步的输出受被记忆的当前状态影响,还可以进一步分为两类Moore型下一状态的输出依赖于电路的当前状态,其状态变化依赖于时钟(只能同步更新)Mealy型输出......
  • 【教学类-83-02】20241214立体书三角嘴2.0——青蛙(扁菱形嘴)
    背景需求:制作小鸡立体贺卡三角嘴,它的嘴是正菱形(四条边长度相等,类似正方形)【教学类-83-01】20241215立体书三角嘴1.0——小鸡(正菱形嘴)-CSDN博客文章浏览阅读744次,点赞22次,收藏11次。【教学类-83-01】20241215立体书三角嘴1.0——小鸡(正菱形嘴)https://blog.csdn.net/reasonsum......
  • 2024年最值得使用的18个Python库
    如果说Python是一把锋利的瑞士军刀,那么Python库就是它的多功能模块,让编程变得更加高效和简单。在2024年,Python生态依然蓬勃发展,各类新兴与经典库层出不穷,究竟有哪些库值得我们投入时间学习和使用?这一份清单将成为你提升生产力的利器!2024年,哪些Python库在实际开发中最具价值?无......
  • yolov11速度估计+距离测量+轨迹跟踪+计数+代码+教程
    YOLOv11速度估计、距离测量、轨迹跟踪与计数:综合解决方案引言随着计算机视觉技术的快速发展,YOLO(YouOnlyLookOnce)系列目标检测算法因其高效性和准确性而广受欢迎。特别是最新的YOLOv8版本,在保持高性能的同时引入了更多功能,如速度估计、距离测量、轨迹跟踪和对象计数。......
  • 计数信号量的获取与释放
    信号量的获取计数器等于0,将任务插入等待队列;计数器大于0,将计数器减1,消耗掉一个资源或事件。信号量的释放检查计数器是否等于0,以及事件控制块是否有等待任务。有则释放掉一个任务;没有则计数器加1.设计实现信号量的wait信号量的notify信号量的无等待获取tSem.c#incl......
  • 计数信号量的原理与创建
    目录计数信号量设计原理设计实现计数信号量信号量就是一个带事件控制的计数器,在其上定义了三个操作:可以被初始化一个非负数wait操作:若该值为0,则执行操作的任务等待;否则将计数值减1notify操作:将信号量的值增1后,若该值为非正,则执行操作的任务唤醒设计原理计数器负......
  • 7-1 sdut- C语言实验—最值
    7-1sdut-C语言实验—最值分数12全屏浏览切换布局作者 马新娟单位 山东理工大学有一个长度为n的整数序列,其中最小值和最大值不会出现在序列的第一和最后一个位置。请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。输入格......
  • 维护最值,遍历一个数字
    1:https://leetcode.cn/problems/maximum-value-of-an-ordered-triplet-ii/description/classSolution{public:longlongmaximumTripletValue(vector&nums){intn=nums.size();longlongans=0;longlonga=0;longlongdiff=0;for(intk=0;k<n;k++){ans......