第一行输入两个整数
。
第二行输入
个整数
。
输出一个整数,表示
的最大值。
1 1 1
0
可选子序列有(空序列)和
,其元素和分别为
、
;取模
后结果均为
,因此答案为
。
n,m=map(int, input().split()) a = list(map(int, input().split())) a = [x%m for x in a] max_possible = m-1 def solve(i, cur_val): if cur_val==max_possible: return cur_val if i==n: return cur_val res = (cur_val+a[i])%m return max(solve(i+1, cur_val), solve(i+1, res), res) print(solve(0, 0))这不该过啊。输入这么多元素。
n, m = map(int, input().split(" "))
A = [int(_) for _ in input().split(" ")]
# print(n, m, A)
R = [0]
def create(index: int, s: int):
if s >= R[0]:
for i in range(index + 1, n):
s1 = s + A[i]
if s1 % m > R[0]:
R[0] = s1 % m
create(i, s1)
for i in range(0, n):
create(i, A[i])
print(R[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)
}