K Inverse Pairs Array
HardDynamic Programming
Solution
export function kInversePairs(n: number, k: number): number {
function sum(n: number) {
return (n * (n - 1)) / 2;
}
const MOD = 10 ** 9 + 7;
if (k < 0 || k > sum(n)) {
return 0;
}
if (k === 0 || k === sum(n)) {
return 1;
}
const dp: number[][] = Array.from({ length: n + 1 }).map(() => new Array(k + 1).fill(0));
dp[2][0] = 1;
dp[2][1] = 1;
for (let i = 3; i <= n; i++) {
dp[i][0] = 1;
for (let j = 1; j <= Math.min(k, sum(i)); j++) {
dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
if (i <= j) {
dp[i][j] -= dp[i - 1][j - i];
}
dp[i][j] = (dp[i][j] + MOD) % MOD;
}
}
return dp[n][k];
}