629. K个逆序对数组

exiaohu 于 2021-11-11 发布

题目链接:629. K个逆序对数组

动态规划。递推公式很难推,建议直接看题解。

class Solution:
    def kInversePairs(self, num: int, key: int) -> int:
        # dp[n][k] = dp[n-1][k] + dp[n][k-1] - dp[n-1][k-n]
        # dp[0]][0] = 1
        MOD = 10 ** 9 + 7

        dp = [[1] + [0] * key, [0] * (key + 1)]
        for n in range(1, num + 1):
            cur, prev = n % 2, (n - 1) % 2
            for k in range(0, key + 1):
                dp[cur][k] = (dp[prev][k] + (dp[cur][k - 1] if k - 1 >= 0 else 0) - (
                    dp[prev][k - n] if k - n >= 0 else 0)) % MOD

        return dp[num % 2][key]