2023.10.11NOIPSIM2总结
T1 黑白染色
赛时没想到做法,看了解题报告后恍然大悟,我还是需要多多做题,培养分析问题、得出结论的能力。
根据题目易得到,当连接两个同色点的边的数量最少时,该染色方案一定满足题目条件。
该结论可以用反证法证明:
当一个点有两个同色邻居时,我们一定可以将这个点染色来减少连接同色点的边的数量。
所以我们只需找到边数最少的染色方案即可。
考虑“调整法”,用队列储存可以修改染色的点,每次修改颜色时检查周围节点是否可以入队。由于边数不超过
所以总时间复杂度为。
T2 置换群初步
赛时打了一个广搜的暴力,因为评测机有点bug导致judge failed。
观察可以发现每次操作不会改变竖列上的数。对一列进行奇数次操作会使得该列上的第一行和第二行上的数交换,进行偶数次操作则不会改变顺序。
我们对初始表格的每一列进行标号,对目标表格含有相同数字的列根据距离奇偶交换第一行和第二行的数并标号,得到一个初始数列和一个目标数列。
因为每进行一次操作最多会出现一个逆序对,我们只需求出在目标序列中有多少个逆序对即可求出最少交换次数,使用树状数组求逆序对即可,时间复杂度 。
T3 detection
正解写挂了,样例全过只得了4分,原因是在记忆化搜索中使用了全局变量储存值。(全局变量不安全!!!)
观察可以发现每块大方阵可以切割成若干块小方阵,最小值在小方阵最小代价之和与直接覆盖大方阵的代价中取min得到。
考虑区间DP, 表示覆盖左上角为 ,右下角为 的方阵所需能量的最小值。因为DP时的顺序不明确,不方便使用递推实现,考虑记忆化搜索,每次在横格线或竖格线中选择一个分割线将方阵割开,直到分割至一个方格,DP值在合并的代价与直接覆盖的代价中取min得到。
再考虑一个优化:我们发现每次分割时只需切割更长的那条边即可得到最优解,无需每次既分割长又分割宽。
枚举状态时间复杂度 ,转移时间复杂度,总时间复杂度 。
本文作者:TimeIsFlying
本文链接:https://www.cnblogs.com/TimeIsFlying/p/17760716.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步