CF R857 div.1
1|0A
我们尽量构造一个数字紧凑(值域接近矩阵大小)矩阵,使每个
显然,若不考虑数字尽量不同的限制,我们朴素的构造 a ^ a ^ a ^ a,我们还可以更进一步,让他们两两不同(当然很显然,但是我们要循序渐进)
现在已经我们令每个矩阵的
发现仅靠一维坐标已经不能构造出简单的小矩形,举个例子,在数轴中我们无法表示一对数值相等的点,但是我们若在平面直角坐标系中即可用新的坐标表示出两个
那么,受此启发,我们讲一个数分成两部分,左部分代表纵坐标,右部分代表横坐标,如第二列第四行我们用这样的二进制数表示,
那么我们对于刚刚的那个
非常好,我们似乎已经构造除了一种方案,使得每个矩阵都满足异或和为“0”,那么符不符合数据范围呢?
我们发现我们的时间复杂度显然是
我们的代码只需将
代码如下,代码中
2|0B
看一眼数据范围,猜到是
升序排序后不难发现,如果要选择第 i 号物品给小A,那么 i+1 ~ n 的所有物品都要给小B,故我们需要知道这一段中 B 数组的最大值 maxb
我们枚举小A最后得到的价值是
1:
2:
好了,我们该思考如何实时得到 mmb,mmb 实际上是要在一个逐渐添加新元素的集合里选出一个接近
代码如下
3|0C
首先,容易想到对于每个数组中的数子,若在它之前有数比他还大,那么他肯定不能对答案贡献,所以将这些数都删掉
不难发现所有数组都是一个单调递增的序列,那么我们就应该考虑如何快速统计答案了
容易发现,所有数组中最大值最小的数如果不放在第一个,那么这个数组就没有作用,因为这个数组前有任意一个数组都会让他没有贡献,所以最优解一定是让每个数组都有可能有贡献,换句话说,我们多考虑一些可能有贡献的,就能更有可能得到最优解
基于以上的想法,我们按每个数组中最大值的顺序从小到大进行线性DP,我们发现后效性仅与已选择的数组中的最大值有关,于是令
__EOF__

本文链接:https://www.cnblogs.com/P32sx-qq1309267816-tel18081238250/p/17219879.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】