第一行输入两个整数
。
第二行输入
个整数
。
输出一个整数,表示
的最大值。
1 1 1
0
可选子序列有(空序列)和
,其元素和分别为
、
;取模
后结果均为
,因此答案为
。
package main
import (
"fmt"
)
func main() {
var n, m int
fmt.Scanf("%d %d", &n, &m)
k := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scanf("%d", &k[i])
}
result := 0
var dfs func(i, sum int)
dfs = func(i, sum int) {
if i == n {
modSum := sum % m
if modSum > result {
result = modSum
}
return
}
// 不选择当前元素
dfs(i+1, sum)
// 选择当前元素
dfs(i+1, sum+k[i])
}
dfs(0, 0)
fmt.Println(result)
}