1 题目大意

1.1 题目翻译

有两个人轮流取物品。总共有 \(n\) 个物品,第 \(i\) 个物品的价值为 \(w_i\)。

他们按照下面的其中一种方式取物品:

  • 取出这一排物品最前面的或者最后面的。这一步没有代价。

  • 设还剩下 \(m\) 个物品,那么重复取出 \(\min(B, m)\) 个物品,每次取出最前面的或者最后面的。这一步的代价为 \(A\)。

  • 设还剩下 \(m\) 个物品,那么重复取出 \(\min(D, m)\) 个物品,每次取出最前面的或者最后面的。这一步的代价为 \(B\)。

最后一个人取出物品的价值为所有他取出物品价值之和减去他所花费的代价。问当两人均以最优策略取物品时,先手取出物品的价值减去后手取出物品的价值为多少。

1.2 数据范围

对于 \(100\%\) 的数据:

  • \(1 \leq B, D \leq n \leq 3000\)

  • \(A, C \leq 10 ^ 9\)

2 解法分析

2.1 初见此题

首先,一看这道题,我们就会发现:不管怎么取物品,任何时刻的序列一定是原序列的一段连续子区间。所以,我们不难想到区间 DP。

2.2 暴力 DP

设 \(f_{i, j}\) 表示当前序列为原序列从第 \(i\) 个到第 \(j\) 个元素时,答案的最大值。那么,会有 \(3\) 种情况:

  • 操作 1。此时,\(f_{i,j} = \max(w_i - f_{i + 1, j}, w_j - f_{i, j - 1})\)

  • 操作 2。设 \(l = j - i + 1\),则:

    • 当 \(B \geq l\) 时:
    \[f_{i, j} = (\sum_{i \leq k \leq j}w_k) - A
    \]
    • 当 \(B < l\) 时:
    \[f_{i, j} = \max_{0 \leq k \leq l}\{(\sum_{i \leq p \leq i + k - 1} w_p) + (\sum_{j - B + k + 1 \leq p \leq j}w_p) - C - f_{i + k, j - B + k}\}
    \]
  • 操作 3。大致与操作 2 相同,这里就不过多叙述。

至此,我们完成了暴力 DP,时间复杂度为 \(\mathcal{O}(n^3)\),显然过不了。

所以,接下来,我们就要考虑优化。

2.3 DP 优化

观察 DP 方程。我们发现,极限复杂度只出现在了操作 2 当 \(B < l\) 的情况。所以,我们把这个式子的 \(\max\) 去掉,得:

\[(\sum_{i \leq p \leq i + k - 1} w_p) + (\sum_{j - B + k + 1 \leq p \leq j}w_p) - C - f_{i + k, j - B + k}
\]

我们发现,\((\sum_{i \leq p \leq i + k - 1} w_p) + (\sum_{j - B + k + 1 \leq p \leq j}w_p)\) 可以前缀和 \(\mathcal{O}(1)\) 计算。设 \(s_{l, r}\) 为 \(l\) 到 \(r\) 的物品价值之和,于是得:

\[- s_{i + k, j - B + k} - f_{i + k, j - B + k} - C + s_{i, j}
\]

观察这个方程。我们把 \(k\) 视为未知数,\(i, j\) 视为常数,则 \(s_{i,j} - C\) 为常数,可以提到 \(\max\) 外面。所以,我们需要维护的只有:

\[s_{i + k, j - B + k} + f_{i + k, j - B + k}
\]

发现这两个区间的长度都是 \((j - B + k) - (i + k) = j - i - B\),那么相当于只需要维护长度为 \(x\) 的 \(f_{i, i + x - 1} + s_{i, i + x - 1}\) 中最小的一个即可。

这有许多维护方法,比如优先队列,线段树,ST 表。

至此,这道题就完成了。时间复杂度为 \(\mathcal{O}(n^2)\) 或者 \(\mathcal{O}(n^2\log{n})\)

[ABC303G] Bags Game 解题分析的更多相关文章

  1. [rctf](web)rcdn 解题分析,知识点总结

    比赛平台关闭了,没有截图,见谅.   解题思路流程: 分析网站结构,看源码,元素审计.发现以下信息. 要得到flag要获得一个pro cdn pro 子域名长度为3到6个字符 存在一个提交ticke页 ...

  2. codeforces 723E (欧拉回路)

    Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...

  3. codeforces716E (点分治)

    Problem Digit Tree 题目大意 给一棵树,有边权1~9. 询问有多少个点对(i,j),将i--j路径上的数字依次连接后所形成新数字可以被k整除.gcd(K,10)=1 解题分析 点分治 ...

  4. poj1741 (点分治)

    Problem Tree 题目大意 给一棵树,有边权.求树上距离小于等于K的点对有多少. 解题分析 点分治.对每一棵子树进行dfs,求出每棵子树的重心,继而转化为子问题. 对于经过根的路径i--j,令 ...

  5. HDU 5884 (贪心)

    problem sort 题目大意 有n个数组,每个数组有a[i]个元素,每次可以将至多k个数组合并为一个数组,所花费代价为这些数组的元素和.给定代价上限,求将所有数组合并为1个数组的最小k. 解题分 ...

  6. codeforces 341d (树状数组)

    problem Iahub and Xors 题目大意 一个n*n的矩阵,要求支持两种操作. 操作1:将一个子矩阵的所有值异或某个数. 操作2:询问某个子矩阵的所以值的异或和. 解题分析 由于异或的特 ...

  7. HDU 5869 (离线+树状数组)

    Problem Different GCD Subarray Query 题目大意 给定n个数的序列,有q个询问,每次询问一个区间中所有子区间所形成不同的gcd的数量. 解题分析 由于固定一个数为右端 ...

  8. HDU5840 (分块+树链剖分)

    Problem This world need more Zhu 题目大意 给一颗n个点的有点权的树,有m个询问,对于每个询问u,v,k,首先将点u到点v的最短路径上的所有点按顺序编号,u的编号为1, ...

  9. HDU 5398 (动态树)

    Problem GCD Tree 题目大意 n个点的无向完全图,标号1~n,每条边u-->v 的权值为gcd(u,v),求其最大生成树,输出最大边权和. n<=10^5,有多个询问. 解题 ...

  10. BZOJ3669 (动态树)

    Problem 魔法森林 (NOI2014) 题目大意 给n个点,m条边的无向图,每条边有两个权值a,b. 求一条从1-->n的路径,使得这条路径上max(a)+max(b)最小.输出最小值即可 ...

随机推荐

  1. HarmonyOS NEXT开发教程:加速web页面访问

    在日常app开发中,访问web页面是很常见的功能,在鸿蒙系统中有多种方案来加速web页面的访问,提升用户体验. 首先,可以在Web组件的onAppear方法中对要加载的页面进行预链接,比如: Web( ...

  2. SQL 日常练习 (十七)

    五一了, 2020过去近乎一半了, 疫情原因, 哪都没去, 其实与其出去玩, 不如呆着学习, 终身学习, 学无止境, 气有浩然, 这是我从上大学开始一直刻在脑海的训诫. 都说今年很艰难, 回头一想, ...

  3. RISC-V指令精讲(一):算术指令--加法指令、比较指令

    本节来看下RV32I(32位整数指令集)的算数指令,先学习下加减指令(add.sub),接着了解下数值比较指令(slt),这些指令都有两个版本:一个是立即数版本,一个是寄存器版本 RISCV-V指令格 ...

  4. Tomcat版本匹配问题

    官方链接http://tomcat.apache.org/whichversion.html Servlet Spec JSP Spec EL Spec WebSocket Spec JASPIC S ...

  5. WPF应用启动时,检测触摸失效的几种方式

    在开发OPS项目,发现插拔式的OPS在切换系统.开关机.重启,会时不时出现部分WPF开机自启的 应用触摸失效的问题.而且出现问题的应用都是全屏窗口应用.用snoop 附加上去,没有Touch 和Sty ...

  6. 网络安全中windows系统常用指令

    windows系统常用指令 dir 显示指定目录下的文件和文件夹列表 cd 更改当前工作目录,cd .. 返回上一级目录 cls 清除命令行窗口的内容 echo 在命令提示符(CMD)中输出文本或显示 ...

  7. Vite代理配置不生效问题

    1.问题: 在写Vite+vue3.0项目时,配置vite代理,遇到不起效的问题,具体如下: // vite.config.ts proxy: { '/api': ' http://localhost ...

  8. NFS常用操作

    查看连接的NFS Client netstat | grep :nfs

  9. games101作业环境一站式配置(2022vs版)

    在尝试配置Eigen和opencv多次失败后,找到一位大佬做的一键配置的GAMES101的作业框架以及运行环境,按照步骤安装后,真的是帮助非常大,特别感谢大佬! 这是大佬的链接: https://gi ...

  10. Local Deep Research - AI驱动的深度研究助手

    项目概述 Local Deep Research (LDR) 是一个AI研究助手,专注于执行深度.迭代的研究任务.核心功能包括: 复杂问题分解:将复杂查询拆分为聚焦的子查询 多源并行搜索:同时搜索网络 ...