1 条题解

  • 0
    @ 2026-8-28 1:31:33

    题解

    思路推导

    从根出发的一条路径由边权序列唯一确定,因此问题等价于统计和为 nn、每项位于 11 到 kk、并且至少有一项不小于 dd 的有序序列。

    设 fi,0f_{i,0} 表示总和为 ii 且尚未使用大边的序列数,fi,1f_{i,1} 表示总和为 ii 且已经使用过大边的序列数。空序列满足 f0,0=1f_{0,0}=1。从状态 ii 追加权值 xx 后转移到 i+xi+x;若 x≥dx\ge d,新状态已经使用大边,否则保持原状态。

    做法

    按总和从小到大枚举 ii,再枚举下一条边权 x=1,2,…,kx=1,2,\ldots,k,执行上述转移。最终答案是 fn,1f_{n,1}。

    当 n≤15n\le 15 时,可以深度优先枚举所有有序拆分并逐条检查。特殊地,当 d=1d=1 时,每条边都满足要求,问题退化为普通的有序组成计数,只需一维状态。另一种独立核验方式是用所有权值不超过 kk 的序列数,减去所有权值严格小于 dd 的序列数。

    正确性证明

    对任意总和不超过 nn 的边权序列,状态第二维准确记录其中是否已经出现权值不小于 dd 的边。追加一条边时,转移按照新边是否达到阈值更新该标记,所以每条合法序列沿其前缀产生唯一的状态转移路径。

    反之,每条从 f0,0f_{0,0} 出发的转移路径对应一个边权均在 11 到 kk 的有序序列。到达 fn,1f_{n,1} 当且仅当序列总和为 nn 且至少含一条大边。因此 fn,1f_{n,1} 与题目要求的路径一一对应,算法正确。

    复杂度分析

    时间复杂度为 O(nk)O(nk),空间复杂度为 O(n)O(n)。

    • 1

    信息

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