1 条题解

  • 3
    @ 2022-3-2 13:56:13

    萌新第一天用 hydro,打开题库随了一道题,然后被这道题吓到了。

    感觉自己写过,翻了一下自己的代码,贺了一份原题交过来,改了改过了。

    不出所料搬了道论文原题,还改了数据范围,很有实力!(这么有实力的吗

    估计自己讲的不够清楚,SMAWK 不会的自己翻 2017 论文集。

    考虑对每种体积的物品做 DP,设做完上一种物品后体积为 ii 的最大价值为 gig_i,当前物品体积为 vv,对这些物品排序后前 jj 个的价值和为 sjs_{j}

    为了更符合决策单调性的形式我们设 wi,j=sji+1w_{i,j}=s_{j-i+1},当 i>ji>jwi,j=0w_{i,j}=0

    设做完当前 DP 值后体积为 ii 的最大价值为 fif_i,显然有转移 fj=maxgi+wi,jf_j=\max{g_i+w_{i,j}}

    对于 ww 的定义考虑可以简单推出四边形不等式,即 wi,j+wi+1,j+1wi,j+1+wi+1,jw_{i,j}+w_{i+1,j+1}\ge w_{i,j+1}+w_{i+1,j},于是有决策单调性。

    但一般的做法都带 log\log,这里给出其中一种:每次选取奇数列下去递归,找到决策点后单调指针求出偶数列的决策点往回传,层数 log\log,每层 O(n)O(n)

    考虑优化,设当前有 mm 列,则此层有用的决策点只有 mm 个,每次把 nn 行都传下去显然不优。

    采用 reduce 过程将 2m×m2m\times m 的单调矩阵裁成 m×mm\times m,考虑点 (i,i)(i,i),其贡献为 gi+wi,ig_i+w_{i,i}

    将其与点 (i+1,i)(i+1,i) 比较,若当前点更优则 i+1i+1 行无用,一直裁到底使得只剩下 mm 个决策行,然后完成了 reduce 操作。

    于是每层就只与当前大小 mm 有关了,用主定理计算一下 T(n)=T(n2)+O(n)T(n)=T(\frac n2)+O(n) 即知这是线性的。

    以下用题目字母分析复杂度:故总复杂度 O(m×{wi})O(m\times|\{w_i\}|),较差的实现可能出现 O(mlogm)O(m\log m) 的复杂度。

    论文题难度降到 9 了,应该不能怪我吧(悲

    其实难度还真不一定高,在线 SMAWK 才难一点。

    • 1

    信息

    ID
    126
    时间
    5000ms
    内存
    128MiB
    难度
    9
    标签
    (无)
    递交数
    35
    已通过
    2
    上传者