蜈蚣(异或和划分)
题目描述
一条蜈蚣有 节,第 节的权值为 。现在要将它切成恰好 段。
每段至少包含一节,且必须由原蜈蚣中连续的若干节组成。所有节都要被分配,不能遗漏,也不能重复使用;相邻两段之间不需要留出空隙。
一段的价值等于其中所有权值的按位异或和。例如,区间 的价值为:
其中 表示按位异或,在 C++ 中对应运算符 ^。
求这 段的价值之和的最大值。
输入格式
第一行两个整数 ,分别表示总节数与需要划分的段数。
第二行 个整数 ,表示各节的权值。
输出格式
输出一个整数,表示恰好划分为 段时,各段价值之和的最大值。
样例 1
5 3
1 2 3 4 5
15
样例解释
一种最优方案为 [1, 2]、[3, 4]、[5],价值分别为 、、,总和为 。
样例 2
2 1
1 1
0
样例解释
必须恰好分成一段,其价值为 ,不能拆成两段得到 。
数据范围与评分
对于所有测试数据,,,。保证最终答案不超过 。
| 测试组 | 分值 | 附加限制 |
|---|---|---|
| 1 | 20 分 | , |
| 2 | 30 分 | , |
| 3 | 50 分 | 无 |
各组独立计分,组内全部测试点通过才能获得该组分数。
来源
根据洛谷 P5144「蜈蚣」整理,评分分组为本训练题配置。