Build Array Where You Can Find The Maximum Exactly K Comparisons
HardDynamic ProgrammingPrefix Sum
Solution
export function numOfArrays(n: number, m: number, k: number): number {
const MOD = 10 ** 9 + 7;
const dp = new Array(n + 1)
.fill(undefined)
.map(() => new Array(m + 1).fill(undefined).map(() => new Array<number>(k + 1).fill(0)));
for (let i = 1; i <= m; i++) {
dp[1][i][1] = 1;
}
for (let len = 2; len <= n; len++) {
for (let maxVal = 1; maxVal <= m; maxVal++) {
for (let cost = 1; cost <= k; cost++) {
let sum = 0;
for (let i = 1; i < maxVal; i++) {
sum = (sum + dp[len - 1][i][cost - 1]) % MOD;
}
dp[len][maxVal][cost] = (dp[len - 1][maxVal][cost] * maxVal + sum) % MOD;
}
}
}
let answer = 0;
for (let i = 1; i <= m; i++) {
answer = (answer + dp[n][i][k]) % MOD;
}
return answer;
}