解题思路
本题要求从能量值序列中选出一个非空子列(保持原有次序,但可以不连续),使得选中晶体的能量总和 S 除以调制基数 M 的余数 SmodM 最大。
由于求和只与选出的元素有关,与顺序无关,问题本质是:从能量值序列中选出非空子集,最大化元素和模 M 的值。因此,本题等价于一个模意义下的子集和可达性问题。
状态设计
我们只关心在模 M 意义下哪些余数能够被某个非空子集的和表示出来。设 dp 为一个二进制状态,其第 r 位(0≤r<M)为 1 表示已经可以构造出某个非空子集,使得其能量总和模 M 等于 r。初始时没有任何数被选中,即所有状态均为 0(空集不计入可达状态)。