题目:原题链接(困难)

标签:动态规划

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( 50 × 50 × 100 ) O(50×50×100) O(50×50×100) O ( 50 × 50 × 100 ) O(50×50×100) O(50×50×100) 120ms (94.44%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

MOD = 10 ** 9 + 7

# 定义状态矩阵:dp[n][k][m]
MAX_N, MAX_M, MAX_K = 50, 100, 50
DP = [[[0] * (MAX_M + 1) for _ in range(MAX_K + 1)] for _ in range(MAX_N + 1)]

# 所有长度为1的数组的搜索代价都为1
for j in range(1, MAX_M + 1):
    DP[1][1][j] = 1

for i in range(2, MAX_N + 1):
    for s in range(1, min(MAX_K, i) + 1):  # 搜索代价不会超过数组长度
        prefix = 0
        for j in range(1, MAX_M + 1):
            DP[i][s][j] = (DP[i - 1][s][j] * j + prefix) % MOD
            prefix += DP[i - 1][s - 1][j]


class Solution:
    def numOfArrays(self, n: int, m: int, k: int) -> int:
        return sum(DP[n][k][j] for j in range(1, m + 1)) % MOD