#P7421. 「PMOI-2」子序列

    ID: 6411 Type: RemoteJudge 200ms 256MiB Tried: 0 Accepted: 0 Difficulty: 5 Uploaded By: Tags>动态规划,dp动态规划优化

「PMOI-2」子序列

题目背景

看到这个时限,大家不必恐慌,本题不卡常。

题目描述

给你一个长度为 nn 的序列 aia_i下标从 11 开始),你需要选出一个 {1,2,3,,n}\{1,2,3,\cdots,n\}任意长度非空的子序列 pp,设 pp 的长度为 ll,定义 a0=p(0)=an+1=0,p(l+1)=n+1a_0=p(0)=a_{n+1}=0,p(l+1)=n+1,你需要最大化:

$$\sum_{i=0}^{l}(a_{p(i+1)}-a_{p(i)})(p(l-i+1)-p(l-i)) $$

求出这个最大值。

aabb 的子序列,则从 bb 中删除 00 或多个元素,按照原顺序可以得到 aa,比如 {1,4}\{1,4\}{1,2,3,4}\{1,2,3,4\} 的子序列,{3,1,5}\{3,1,5\}{3,1,5}\{3,1,5\} 的子序列,{1,2}\{1,2\} 不是 {3,2,1}\{3,2,1\} 的子序列。

输入格式

第一行输入一个正整数 nn,表示 aa 的长度。

第二行输入 nn 个整数,第 ii 个数表示 aia_i

输出格式

输出一个整数,表示 $\sum_{i=0}^{l}(a_{p(i+1)}-a_{p(i)})(p(l-i+1)-p(l-i))$ 的最大值。

3
1 5 2
2
5
-2 3 2 5 3
15

提示

【样例解释】

对于第一个样例,选择 {1}\{1\} 可以得到最大结果 (10)×(41)+(01)×(10)=2(1-0)\times(4-1)+(0-1)\times(1-0)=2

对于第二个样例,选择 {1,5}\{1,5\} 可以得到最大结果 $(-2-0)\times(6-5)+[3-(-2)]\times(5-1)+(0-3)\times(1-0)=15$。

【数据范围】

对于 20%20\% 的数据,n20n\le200ai1030\le a_i\le10^3

对于 50%50\% 的数据,n80n\le80

对于 100%100\% 的数据,1n3001\le n\le300109ai109-10^9\le a_i\le10^9