# 629. K Inverse Pairs Array

#### Hard

***

For an integer array `nums`, an **inverse pair** is a pair of integers `[i, j]` where `0 <= i < j < nums.length` and `nums[i] > nums[j]`.

Given two integers n and k, return the number of different arrays consist of numbers from `1` to `n` such that there are exactly `k` **inverse pairs**. Since the answer can be huge, return it **modulo** `109 + 7`.

&#x20;

**Example 1:**

```
Input: n = 3, k = 0
Output: 1
Explanation: Only the array [1,2,3] which consists of numbers from 1 to 3 has exactly 0 inverse pairs.
```

**Example 2:**

```
Input: n = 3, k = 1
Output: 2
Explanation: The array [1,3,2] and [2,1,3] have exactly 1 inverse pair.
```

&#x20;

**Constraints:**

* `1 <= n <= 1000`
* `0 <= k <= 1000`

```python
class Solution:
    def kInversePairs(self, n: int, k: int) -> int:
        #.
        MOD = 10**9+7
        dp = [[0]*(k+1) for _ in range(n+1)]
        dp[0][0] = 1
        for i in range(1, n+1):
            cumsum = 0
            for j in range(k+1):
                if j == 0:
                    dp[i][j] = 1
                    cumsum += 1
                else:
                    cumsum += dp[i-1][j]
                    if j-i >= 0:
                        cumsum -= dp[i-1][j-i]
                    dp[i][j] = cumsum % MOD
        return dp[n][k]
```
