题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", function (line) { const tokens = line.split(" "); const apples = tokens[0]; const plates = tokens[1]; let dp = []; // dp 数组 存每个组合的结果; dp[0] = new Array(Number(plates+1)).fill(0) for (let x = 0; x < apples; x++) { dp.push([0,1]); } // console.log(JSON.stringify(dp)); // 递推顺序 for (let i = 1; i <= plates; i++) { for (let j = 1; j <= apples; j++) { if(i > j){ dp[j][i] = dp[j][i-1] } if(j === i){ // 每个盘子分配1个是一次新的结果 dp[j][i] = Number(dp[j][i-1]) + 1; continue; } // 递推公式 每一项的盘子-1的分配结果 + 每个盘子都放1个后 重新分配剩下的j-i个苹果 就是重新分配一下j-i个苹果到i个盘子里 if (j > i) { dp[j][i] = Number(dp[j][i-1]) + Number(dp[j-i][i]); continue; } } } console.log(dp[apples][plates]); });