小美拿到了一个数组,她准备构造一个数组满足:
1. 的每一位都和对应位置不同,即
2. 的所有元素之和都和相同。
3. 的数组均为正整数。
请你告诉小美有多少种构造方式。由于答案过大,请对取模。
第一行输入一个正整数,代表数组的大小。
第二行输入个正整数,代表小美拿到的数组。
一个整数,代表构造方式对取模的值。
3 1 1 3
1
只有[2,2,1]这一种数组合法。
3 1 1 1
0
import sys for i, line in enumerate(sys.stdin): if i == 0: n = int(line) else: nums = [int(num) for num in line.split()] total = sum(nums) # 创建dp表 dp = [[0] * (total + 1) for _ in range(n + 1)] for i in range(1, n + 1): for j in range(1, total + 1): if i == 1: if j != nums[i-1]: dp[i][j] = 1 else: dp[i][j] = 0 else: dp[i][j] = (sum(dp[i-1][0:j]) - dp[i-1][j-nums[i-1]]) if (j - nums[i-1]) > 0 else sum(dp[i-1][0:j]) print(dp[n][total] % (10**9+7))