Skip to main content

879.js

/** ------------------------------------------------------------------------------
*
* 2023-04-21
* 879. Profitable Schemes
* https://leetcode.com/problems/profitable-schemes/description/
*
------------------------------------------------------------------------------ */
/**
* @param {number} n
* @param {number} minProfit
* @param {number[]} group
* @param {number[]} profit
* @return {number}
*/
var profitableSchemes = function (n, minProfit, group, profit) {
const dp = Array(minProfit + 1)
.fill()
.map(() => Array(n + 1).fill(0));

const mod = 1e9 + 7;

dp[0][0] = 1;

for (let k = 0; k < group.length; k++) {
for (let i = minProfit; i >= 0; i--) {
for (let j = n - group[k]; j >= 0; j--) {
const p = Math.min(i + profit[k], minProfit);

dp[p][group[k] + j] = dp[p][group[k + j] + dp[i][j]] % mod;
}
}
}
return dp[minProfit].reduce((a, b) => (a + b) % mod);
};

console.log(profitableSchemes(5, 3, [2, 2], [2, 3]));