1 条题解

  • 0
    @ 2026-4-30 20:43:06

    题意

    考虑第一只兔子:我们可以在第二只兔子之前或之后选择它。如果它在第二只兔子之后被选择,那么从第二只兔子到最后一只兔子的解与第一只兔子无关;否则,我们会得到相同的结果,但在第二只兔子之前显然会是喂食的兔子。因此,我们有两种动态规划状态。

    思路

    定义两种动态规划状态:

    1. d0id0_i —— 将后缀 ii 作为一个独立任务时的答案。
    2. d1id1_i —— 如果该后缀的前一只兔子已经被喂食,则后缀 ii 的答案。

    算法步骤

    • 初始化:
      • d0n=and0_n = a_n
      • d1n=bnd1_n = b_n
    • i=n1i = n-111 递推:
      • d0i=max(ai+d1i+1, bi+d0i+1)d0_i = \max(a_i + d1_{i+1},\ b_i + d0_{i+1})
      • d1i=max(bi+d1i+1, ci+d0i+1)d1_i = \max(b_i + d1_{i+1},\ c_i + d0_{i+1})
    • 最终答案为 d01d0_1

    复杂度分析

    • 时间复杂度:O(n)O(n),其中 nn 是兔子的数量。
    • 空间复杂度:O(n)O(n)O(1)O(1)(若只保留上一状态)。

    代码说明

    • 使用两个数组或两个变量分别存储 d0d0d1d1 的值。
    • 从后向前遍历,根据递推公式更新状态。
    • 最终输出 d01d0_1 即为所求答案。
    • 1

    信息

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