# 629. K Inverse Pairs Array

Given two integers `n` and `k`, find how many different arrays consist of numbers from `1` to `n` such that there are exactly `k` inverse pairs.

We define an inverse pair as following: For `ith` and `jth` element in the array, if `i` < `j` and `a[i]` > `a[j]` then it’s an inverse pair; Otherwise, it’s not.

Since the answer may very large, the answer should be modulo 109 + 7.

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 pair.
``````

Example 2:

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

Note:

1. The integer `n` is in the range [1, 1000] and `k` is in the range [0, 1000].

xxxx5

xxx5x

xx5xx

x5xxx

5xxxx

dp[n+1][k] = dp[n][k] + dp[n][k-1] + … + dp[n][k - n]

dp[n][k] = dp[n - 1][k] + dp[n - 1][k-1] + … + dp[n - 1][k - n + 1]

``````class Solution {
public:
int kInversePairs(int n, int k) {
int M = 1000000007;
vector<vector<int>> dp(n + 1, vector<int>(k + 1, 0));
dp[0][0] = 1;
for (int i = 0; i <= n; ++i) {
for (int j = 0; j < i; ++j) {
for (int m = 0; m <= k; ++m) {
if (m - j >= 0 && m - j <= k) {
dp[i][m] = (dp[i][m] + dp[i - 1][m - j]) % M;
}
}
}
}
return dp[n][k];
}
};
``````

dp[n][k] = dp[n - 1][k] + dp[n - 1][k-1] + … + dp[n - 1][k - n + 1]

dp[n][k+1] = dp[n - 1][k+1] + dp[n - 1][k] + … + dp[n - 1][k + 1 - n + 1]

dp[n][k+1] = dp[n][k] + dp[n - 1][k+1] - dp[n - 1][k - n + 1]

dp[n][k] = dp[n][k-1] + dp[n - 1][k] - dp[n - 1][k - n]

``````class Solution {
public:
int kInversePairs(int n, int k) {
int M = 1000000007;
vector<vector<int>> dp(n + 1, vector<int>(k + 1, 0));
dp[0][0] = 1;
for (int i = 1; i <= n; ++i) {
dp[i][0] = 1;
for (int j = 1; j <= k; ++j) {
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % M;
if (j >= i) {
dp[i][j] = (dp[i][j] - dp[i - 1][j - i] + M) % M;
}
}
}
return dp[n][k];
}
};
``````

https://discuss.leetcode.com/topic/93815/java-dp-o-nk-solution/2

https://discuss.leetcode.com/topic/93765/shared-my-c-o-n-k-solution-with-explanation

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation