题解 | #放苹果#
放苹果
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]);
});