A91479.最大模意义下子序列
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定一个包含 n 个整数的数组 a,以及一个整数 m。你需要从中选择若干个下标,组成一个严格递增的下标序列
b1,b2,…,bk(1≤b1<b2<⋯<bk≤n),
使得下面这个值尽可能大:
(i=1∑kabi)modm.
你也可以一个数都不选,此时视为选出的下标序列为空,和为 0,取模后的值为 0。
请你输出上述表达式可能取得的最大值。
输入格式
第一行包含两个整数 n 和 m:
- 1≤n≤35,
- 1≤m≤109。
第二行包含 n 个整数 a1,a2,…,an,满足:
- 1≤ai≤109。
输出格式
输出一个整数,表示
(i=1∑kabi)modm
在所有合法选择下标序列的方案中,能够取得的最大值。
输入输出样例
输入#1
4 4 5 2 4 1
输出#1
3
输入#2
3 20 199 41 299
输出#2
19
说明/提示
样例解释 #1
一种最优做法是选择下标集合 {1,2},此时
a1+a2=5+2=7,7mod4=3,
可以证明这是能够得到的最大值。
样例解释 #2
一种最优做法是只选择下标 3,此时
a3=299,299mod20=19,
为可以取得的最大值。
数据范围与说明
- 1≤n≤35;
- 1≤m≤109;
- 1≤ai≤109;
- 你可以选择的下标序列可以为空,此时结果为 0。