赚个矿石,粘贴的一道AI刷题的题,各位大佬忽视勿喷哈哈哈 小F面临一个有趣的挑战:给定一个数组,她需要将数组中的数字分为两组。分组的目标是使得一组数字的和的个位数等于给定的 A,另一组数字的和的个位数等于给定的 B。除此之外,还有一种特殊情况允许其中一组为空,但剩余数字和的个位数必须等于 A 或 B。小F需要计算所有可能的划分方式。
例如,对于数组 [1, 1, 1] 和目标 A = 1,B = 2,可行的划分包括三种:每个 1 单独作为一组,其余两个 1 形成另一组。如果 A = 3,B = 5,当所有数字加和的个位数为 3 或 5 时,可以有一组为非空,另一组为空。
`def solution(n: int, A: int, B: int, array_a: list) -> int: assert A <= 9 and B <= 9 assert n == len(array_a)
MOD = 10000007
dp = [[0 for _ in range(10)] for _ in range(n + 1)]
sum_value = sum(array_a) % 10
ret = (A + B) % 10
res = 0
if sum_value == B:
res += 1
dp[0][0] = 1
if sum_value == ret:
for i in range(1, n + 1):
for j in range(10):
dp[i][j] = (dp[i - 1][j] + dp[i - 1][(j - array_a[i - 1]) % 10]) % MOD
return (dp[n][A] + res) % MOD
else:
if sum_value == A:
res += 1
return res
if name == 'main': print(solution(n = 3,A = 1,B = 2,array_a = [1, 1, 1]) == 3) print(solution(n = 3,A = 3,B = 5,array_a = [1, 1, 1]) == 1) print(solution(n = 2,A = 1,B = 1,array_a = [1, 1]) == 2) print(solution(n = 5,A = 3,B = 7,array_a = [2, 3, 5, 7, 9]) == 0) `