题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
package main
import (
"fmt"
)
func calculate(m int, n int) int {
// dp[i][j] 表示把 i 个苹果放入 j 个盘子里,具有的不同放法,则 dp[m][n] 即为所求
dp := make([][]int, m+1)
for i:=0; i<len(dp); i++ {
dp[i] = make([]int, n+1)
}
// 初始化
for i:=1; i<=m; i++ {
dp[i][0] = 1
dp[i][1] = 1
}
for j:=1; j<=n; j++ {
dp[0][j] = 1
dp[1][j] = 1
}
// 动态转移方程
for i:=2; i<=m; i++ {
for j:=2; j<=n; j++ {
if i < j {
dp[i][j] = dp[i][i]
} else {
dp[i][j] = dp[i][j-1] + dp[i-j][j]
}
}
}
return dp[m][n]
}
func main() {
var m int
var n int
fmt.Scan(&m, &n)
fmt.Println(calculate(m, n))
}
// 本题输入为一个整形数字,所以采用:fmt.Scan(&m, &n)

