最优子序列)取 m = 16,给出长度为n的整数序列a₁, a₂, ⋯, aₙ(0 ≤ aᵢ < 2ᵐ)。对于一个二进制数x,定义其分值w(x)为x + popcnt(x),其中popcnt(x)表示 x 二进制表示中 1 的个数。对于一个子序列b₁, b₂, ⋯, bₖ,定义其子序列分值S为w(b₁ ⊕ b₂) + w(b₂ ⊕ b₃) + w(b₃ ⊕ b₄) + ⋯ + w(bₖ₋₁ ⊕ bₖ)。其中⊕表示按位异或。对于空子序列,规定其子序列分值为0。求一个子序列使得其子序列分值最大,输出这个最大值。
输入第一行包含一个整数 n(1 ≤ n ≤ 40000)。接下来一行包含n个整数a₁, a₂, ⋯, aₙ。
提示:考虑优化朴素的动态规划算法,将前m/2位和后m/2位分开计算。
Max[x][y] 表示当前的子序列下一个位置的高 8 位是 x、最后一个位置的低 8 位是 y 时的最大价值。
试补全程序。