1 条题解

  • 0
    @ 2025-10-16 17:39:46

    解法思路

    核心思想:随机化 + 贪心构造

    利用题目保证至少 20% 路标相容的性质,通过多次随机选择起始路标,构造最大相容集合。

    算法框架

    1. 关键观察

    • 如果两个路标相容,它们到各城市的距离差应满足特定约束
    • 通过坐标平移和变换,可以将问题转化为数值比较问题

    2. 主要步骤

    步骤 1:归一化处理

    • 以随机选定的路标 xx 为基准
    • 计算相对距离:r[j]=d[x][j]d[x][1]r[j] = d[x][j] - d[x][1]
    • 对每个路标 ii,计算变换后的值:a[i][j]=d[i][j]r[j]a[i][j] = d[i][j] - r[j]

    步骤 2:可行性筛选

    • 对每个路标,找到变换后数组的最小值 mnmn
    • 将整个数组减去 mnmn 进行归一化
    • 检查所有值是否 1\leq 1,若大于 1 则排除该路标

    步骤 3:位运算编码

    • 用 bitset 编码每个路标的非零位置
    • 按非零位置数量排序,减少后续检查次数

    步骤 4:动态规划构造最大链

    • 定义 f[x]f[x] 表示以路标 xx 结尾的最大相容集合大小
    • 状态转移:如果路标 yy 的编码是 xx 的子集,则 f[x]=max(f[x],f[y]+1)f[x] = \max(f[x], f[y] + 1)
    • 记录转移路径用于回溯

    3. 随机化优化

    • 重复 40 次随机选择起始路标
    • 取所有尝试中的最大相容集合

    关键技巧

    1. 归一化变换:消除绝对坐标影响,聚焦相对关系
    2. 位运算编码:用 bitset高效表示和比较约束条件
    3. 子集 DP:利用集合包含关系进行动态规划
    4. 多次随机:提高找到最优解的概率

    复杂度分析

    • 时间复杂度O(40(nm+n2m/w))O(40 \cdot (nm + n^2 \cdot m/w)),其中 ww 为字长
    • 空间复杂度O(nm)O(nm)
    • 1

    信息

    ID
    3207
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者