这真是一道有趣的题目。 ——垃圾一个
首先,我们知道,有一个
C++11
才有的东西:__int128
,它的上界是 2 128 − 1 2^{128}-1 2128−1。
然后,我们知道,有一个叫宏定义的东西,它可以长这样#define int __int128
。
最后,有一个玄学知识,main
函数不仅可以是int
,也可以是signed
。
基础玄学知识介绍完毕。
接下来说说如何 D P DP DP。
首先我们仅考虑每一行如何取(具体原因自行看题)。
然后对于每一行,我们仅考虑取头与取尾的 m a x max max值(具体原因同上)。
然后定义 f i , j f_{i,j} fi,j为取区间 [ i , j ] [i,j] [i,j]的最大值,定义 a i a_i ai为该行第 i i i个数。
则转移方程为:
f i , j = max f i + 1 , j + a i × x , f i , j − 1 + a j × x , x f_{i,j}=\max{f_{i+1,j}+a_i \times x,f_{i,j-1}+a_j \times x},x fi,j=