猜序列
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Description
zty提出了一个奇怪的问题。
对于一个数列,若你每次选择区间[i,j],则你会花费的代价,得知的值。问至少花费多少代价,可以知道序列中的每一个数。
Input
第一行一个正整数,表示数列的长度。 。
接下来输入行,每行个整数。其中第行第个数为,其含义见题目描述。
Output
输出一个整数,表示知道序列中每一个数的最小代价。
Samples
tips
【样例一解释】
一种最优的方案:选择区间【5,5】【5,2】【4,5】【2,1】【5,1】。
由区间【5,1】【5,2】可知序列中第一个数。
由于已知第一个数,结合区间【2,1】可知第二个数。
由区间【5,5】可知第五个数的大小。
由于已知第五个数,结合区间【4,5】可知第四个数。
由于已知第一、二、四、五个数,结合区间【1,5】可知第三个数。
此时代价总和为0+0+0+2+2=4。可以证明,4为最小的代价。
【样例二解释】
我有个绝妙的解释,可惜写不下。
【温习】 异或
异或是信息学竞赛中常见的考察点,符号为。其通俗的表示为:相同则为假,相反则为真。
例如的二进制表示是,的二进制表示是,则。(按位对齐后每一位进行异或。的最低位与的最低位相同,异或结果对应为,第二位不同,结果对应为,其余同理)
显然异或满足交换律:。
显然其也满足自反性:。
显然有。
数列~的异或和即。特别地,当时,异或和为本身。
在C++语言中,我们用^表示异或。以下代码:
其含义为:将与异或的结果赋给。
【数据范围及约定】
本题共有个测试点,每个测试点10分,共100分。各测试点性质如下:
对于测试点:。
对于测试点~:。
对于测试点:输入保证矩阵中的每个数都相等。
对于测试点:输入保证矩阵递增,即,且。
对于测试点~:,。不保证输入数据满足。