Leetcode: 629. K Inverse Pairs Array

Problem Statement

class Solution:
    def kInversePairs(self, N: int, K: int) -> int:
        MOD = 10**9 + 7

        right = [0] * (K + 1)
        right[0] = 1
        for n in range(2, N + 1):
            cur = [0] * (K + 1)
            for k in range(K, -1, -1):
                cur[k] = right[k - min(n, k + 1) + 1] - (
                    right[k + 1] if k + 1 <= K else 0
                )
                if k < K:
                    cur[k] = cur[k] + cur[k + 1]
                cur[k] = cur[k] % MOD
            right = cur

        return right[K]


assert Solution().kInversePairs(3, 0) == 1
assert Solution().kInversePairs(3, 1) == 2