1 条题解

  • 0
    @ 2025-10-26 23:10:38

    小奇探险宝箱最大价值问题题解

    一、题目核心分析

    本题是带约束的动态规划优化问题,核心目标是在满足“任意长度为MM的连续宝箱中必取一个”的前提下,最大化按顺序取宝箱的总价值。价值计算的关键特性是“体力指数衰减”——初始体力为11,每取一个宝箱后体力变为原来的kk倍(0<k<10<k<1),第tt次取的宝箱贡献为kt1×宝箱价值k^{t-1} \times 宝箱价值

    关键矛盾与破局点:

    1. 约束转化:若取第ii个宝箱,上一个取的宝箱jj必须在[iM,i1][i-M, i-1]区间内(否则[j+1,i][j+1, i]长度超过MM,违反约束)。
    2. 体力衰减的关联性:取宝箱jj后,体力为ktk^ttt为取jj时的次数),取ii时的贡献为kt×a[i]k^t \times a[i],总价值为“取jj的总价值 + kt×a[i]k^t \times a[i]”。
    3. 数据规模N1e5N \leq 1e5,普通O(NM)O(NM)动态规划超时,需通过斜率优化+单调队列+二分查找将时间复杂度降至O(NlogM)O(N\log M)

    二、动态规划设计与转移方程

    1. 状态定义

    设:

    • dp[i]dp[i]:取第ii个宝箱时的最大总价值
    • power[i]power[i]:取第ii个宝箱后的体力(即下一次取宝箱时的体力);
    • 虚拟节点00:代表“未取任何宝箱”的初始状态,dp[0]=0dp[0] = 0(总价值为00),power[0]=1power[0] = 1(初始体力为11)。

    2. 转移方程推导

    若第ii个宝箱的上一个取的宝箱为jjj[max(0,iM),i1]j \in [\max(0, i-M), i-1]),则:

    • ii的贡献为“取jj后的体力 × a[i]a[i]”,即power[j]×a[i]power[j] \times a[i]
    • ii后的总价值为dp[j]+power[j]×a[i]dp[j] + power[j] \times a[i]
    • ii后的体力为power[j]×kpower[j] \times k(体力乘kk衰减)。

    因此,核心转移方程为:

    $$dp[i] = \max_{j \in [\max(0, i-M), i-1]} \left( dp[j] + a[i] \times power[j] \right) $$$$power[i] = power[j_{\text{opt}}] \times k \quad (j_{\text{opt}}是使dp[i]最大的j) $$

    3. 样例验证(核心推导正确性)

    样例输入:N=3,M=2,k=0.1,a=[1,2,3]N=3, M=2, k=0.1, a=[1,2,3]

    • 处理i=1i=1(窗口[0,0][0,0]):仅j=0j=0可选,dp[1]=0+1×1=1.0dp[1] = 0 + 1 \times 1 = 1.0power[1]=1×0.1=0.1power[1] = 1 \times 0.1 = 0.1
    • 处理i=2i=2(窗口[0,1][0,1]):比较j=0j=0
    • 1

    信息

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