DUT Star Weekly Contest #3 Problem F Solution
问题转化
\[a_i+a_j+(i-j)^2=a_i+i^2+a_j+j^2-2ij\]
令 \(b_i=a_i+i^2\) , 问题化为: 求
\[\max \{b_i+b_j-2ij\}, \ (1 \le i, j \le n, i \ne j).\]
固定 \(i\) , 不妨设 \(j<i\) , 定义函数
\[
\begin{equation}
F_i(j) = b_j-2ij,\ (1 \le j< i)
\end{equation}
\]
问题化成: 求
\[
\begin{equation}
OPT_i = \max{F_i(j)}.
\label{OPT}
\end{equation}
\]
设 \(k<j<i\) , 我们来推导取 \(j\) 优于 \(k\) 的条件:
\[b_j - 2ij > b_k-2ik \Longrightarrow (b_j-b_k) > 2i(j-k)\]
即
\[
\begin{equation}
\dfrac{b_j - b_k}{j-k} > 2i
\label{C}
\end{equation}
\]
将 \(\eqref{C}\) 式左边记作 \(g(k, j)\) , 右边记作 \(f(i)\) , 对于 \(OPT_i\) 而言, \(j\) 优于 \(k\) 的条件为:
\[
\begin{equation}
g(k,j) > f(i) \label{general_C}
\end{equation}
\]
考虑一平面点集 \(P: \{ p_i: (i, b_i)\}, 1 \le i \le n\), 则 \(g(k, j)\) 表示斜率, 显然有
\[ g(j, k) = g(k, j) \]
斜率单调性优化
为了快速求 \(OPT_i\), 借助 \(\eqref{general_C}\) , 我们研究一下哪些 \(j\ (1 \le j < i)\) 不可能是 \(OPT_i\) 的唯一解. 有如下结论:
设 \(j_1<j_2<j_3\) ,
\(g(j_1, j_2) \le g(j_2, j_3)\) \(\Longrightarrow\) \(\forall i > j_3, \quad j_2\) 不优于 \(j_1\) 或者 \(j_2\) 不优于 \(j_3\)
证明:
\(\forall i > j_3\),
若 \(j_2\) 优于 \(j_3\) 即 \(g(j_2, j_3)<f(i)\), 则 \(g(j_1, j_2) \le g(j_2, j_3) < f(i)\) 即 \(j_1\) 优于 \(j_2\)
若 \(j_2\) 优于 \(j_1\) 即 \(g(j_1, j_2)>f(i)\), 则 \(g(j_2, j_3) \ge g(j_1, j_2) > f(i)\) 即 \(j_3\) 优于 \(j_2\)
根据这个结论, 为了求解 \(OPT_i\), 可以维护一个点的队列使得
- 相邻两点的斜率严格递减.
- 任意相邻两点的斜率都满足 \(\eqref{general_C}\) 式
这样队尾的点即为最优.
由 \(n\) 个点构造这样的一个队列的复杂度是 \(O(n)\). 另外, 可以令队列中的点只满足上述条件1, 然后从后向前遍历或者二分寻找 与前一个点斜率仍满足 \(\eqref{general_C}\) 式的最末的那个点.
然而我们并不能对每个 \(OPT_i\) 都从头求一遍, 那样复杂度和暴力一样. 对于一般情况, 我们可以动态维护一个斜率严格递减的队列, 在上面二分求解, 复杂度是 \(O(n\log n)\) . 当 \(f(i)\) 单调时, 复杂度可以做到 \(O(n)\) :
- \(f(i)\) 递增: 在斜率单调递减的基础上, 每次在求解 \(OPT_i\) 之前, 若队尾两点满足 \(g(j_1, j_2) \le f(i)\) , 则队尾点出队, 反复该操作. 用队尾元素计算DP值.
- \(f(i)\) 递减: 在斜率单调递减的基础上, 每次在求解 \(OPT_i\) 之前, 若队首两点符合 \(g(i_1, j_2) \ge f(i)\) , 则队首点出队, 反复该操作. 用队首元素计算DP值.
这一步可以称作 EXPOSING, 很形象, 它的目的正是将最优的转移点暴露出来.
总结
形如
\[
\begin{equation}
g(i,j) \lessgtr f(i)
\label{condition}
\end{equation}
\]
, 左边 \(g(i,j)\) 是某种斜率的形式, 都可以通过维护斜率单调的队列来优化. 一般情况下, 复杂度可优化到 \(O(n\log n)\) , 当 \(f(i)\) 单调时, 复杂度可进一步优化到 \(O(n)\) :
- 形如 \(g(i,j)>f(i)\) , 维护一个相邻点斜率严格递减的点列.
- 形如 \(g(i,j)<f(i)\) , 维护一个相邻点斜率严格递增的点列.
DUT Star Weekly Contest #3 Problem F Solution的更多相关文章
- The Ninth Hunan Collegiate Programming Contest (2013) Problem F
Problem F Funny Car Racing There is a funny car racing in a city with n junctions and m directed roa ...
- 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...
- 2019 GDUT Rating Contest II : Problem F. Teleportation
题面: Problem F. Teleportation Input file: standard input Output file: standard output Time limit: 15 se ...
- Problem F Plug It In!
题目链接:https://cn.vjudge.net/contest/245468#problem/F 大意:给你插座和电器的对应关系,有多个电器对应一个插座的情况,但是一个插座只能供一个电器使用,现 ...
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem F. Judging Time Prediction 优先队列
Problem F. Judging Time Prediction 题目连接: http://www.codeforces.com/gym/100253 Description It is not ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题
Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...
- HDU 6324.Problem F. Grab The Tree-博弈(思维) (2018 Multi-University Training Contest 3 1006)
6324.Problem F. Grab The Tree 题目看着好难,但是题解说的很简单,写出来也很简单.能想出来就是简单的,想不出来就难(讲道理,就算是1+1的题目,看不出来就是难的啊). 和后 ...
- Leetcode Weekly Contest 86
Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...
- LeetCode Weekly Contest 28
1. 551. Student Attendance Record I 2. 552. Student Attendance Record II hihocode原题,https://hihocode ...
随机推荐
- script标签中defer和async属性的区别
这篇文章来源于JS高级程序设计第三版中关于script标签的介绍,结合查阅的资料写下的学习笔记. 向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一 ...
- ES6笔记(一):ES6所改良的javascript“缺陷”
块级作用域 ES5没有块级作用域,只有全局作用域和函数作用域,由于这一点,变量的作用域甚广,所以一进入函数就要马上将它创建出来.这就造成了所谓的变量提升. ES5的"变量提升"这一 ...
- IntelliJ IDEA安装及jsp开发环境搭建
一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...
- Python导入其他文件中的.py文件 即模块
import sys sys.path.append("路径") import .py文件
- Windows 10不能拨L2TP协议的VPN
之前是Windows 10版本1607版本14393.102升级14393.187过后,突然出现不能拨公司防火墙的L2TPVPN了. 网上众说纷纭,原来遇到这个问题的人真不少,不过我是第一次遇到.结合 ...
- 网页日历显示控件calendar3.1
关于日历控件,我做了好多次尝试,一直致力于开发一款简单易用的日历控件.我的想法是争取在引用这个控件后,用一行js代码就能做出一个日历,若在加点参数,就能自定义外观和功能丰富多彩的日历.Calendar ...
- Ubuntu15.04YouCompleteMe插件安装
0x00. 简介 YouCompleteMe号称Vim的自动补全神器,YouCompleteMe: a code-completion engine for Vim,该项目在github的地址:You ...
- AngularJS(1)
AngularJS(1) 在讲正题之前,先说一下有关angular简介方面的信息: 1. angularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优 ...
- Typical EEG waveforms during sleep 睡眠状态下的几种典型EEG波形
Sources: EEG Atlas
- [LeetCode] Inorder Successor in BST 二叉搜索树中的中序后继节点
Given a binary search tree and a node in it, find the in-order successor of that node in the BST. No ...