Aizu - ALDS1_1_1_D

(这貌似是个日本的oj?名字叫aizu有点奇怪呢hhhh)

  这道题的思路是首先将相减转化为相加。我们可以在原数组的基础上再构造一个新的数组sub[],sub[]中存放的是R[i+1]-R[i],因此,有以下式子成立: (R[i+1]-R[i]) + (R[i+2]-R[i+1]) + ··· + (R[j-1]-R[j-2]) + (R[j] - R[j-1]) = sub[i+1] + sub[i+2] + ··· + sub[j-1] + sub[j] = R[j] - R[i]   这么一来,求差的最大值就转化为了求sub[]的连续子序列和的最大值,而这只需要用dp求即可。状态转移方程为dp[j] = max(dp[j-1] + sub[j],sub[j])。

代码如下: