指纹值小于 212,所有可能的异或结果只有 V=4096 种。对每个异或值 x,维护达到它的最少选取件数 min_t[x] 与最多选取件数 max_t[x]。
用 0/1 背包在异或维上转移:对当前指纹 v,
有 n 块信号模块,每块都带有相同的基础增益 b,第 i 块的指纹值为 ai。选择其中 t 块(不可重复),记所选指纹为 ai1,…,ait,则总增益为
(ai1⊕ai2⊕⋯⊕ait)+b×t其中 ⊕ 表示按位异或。也可以一块都不选,此时总增益为 0。
请在总增益最大的前提下,使所选模块数 t 尽可能少,并同时输出这个最少模块数与最大总增益。
约束:测试组数不超过 20,单组模块数不超过 10^3,基础增益 b 满足 −25≤b≤25,指纹值满足 0≤ai<212,且单个测试文件中模块数之和不超过 10^3。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.