最优分割

Special Judge 提交数: 187, 通过率: 0.53%, 平均分: 0.75

题目描述:

一个数字序列是回文的,当且仅当其从前往后读与从后往前读不变。

形式地,一个序列S[1..n]是回文的当且仅当对任意j[1..n],有S[j]=S[nj+1]

定义一个回文数字序列S[1..n]的能量值为P(S[1..n])=(S[1]S[2]S[n/2])×n

其中表示按位异或,n/2表示向上取整。

即能量值为序列左半部分数字异或和(若长度为奇数,包括正中间的数字)乘上序列长度。

现给定一个长度为N的序列T,问将序列T[1..N]分割成若干个连续的回文序列,这些回文序列的能量和最大为多少?

请输出使得能量和最大的任一合法分割方案。

输入格式:

第一行一个整数N

第二行N个整数表示序列T

1N106,0T[i]109.

输出格式:

第一行输出能得到的最大能量和为多少。

第二行输出一个整数C,表示T被分割成了C块。

接下来C行,升序输出每一块的右端点的下标。

样例输入:

6
1 2 1 2 1 2

样例输出:

18
2
3
6

提示:

 T的分割方法有(1),(2),(1),(2),(1),(2);(1),(2,1,2),(1),(2);(1,2,1),(2,1,2)

其中分割成(1,2,1),(2,1,2)能量值为(12)×3+(21)×3=3×3+3×3=18,为最优解。

时间限制: 3000ms
空间限制: 512MB

来源: by Massimo