题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/4f0c1e21010e4d849bde5297148e81d9
#include<bits/stdc++.h> using namespace std; //动态规划函数 int countWays(int m, int n) { //创建一个二维数组来存储结果 int dp[m + 1][n + 1]; for(int i=0;i<=m;i++) { for(int j=0;j<=n;j++) { dp[i][j]=0;//数组初始化 } } //计算其余情况下的放苹果方法数 for (int i = 1; i <= m; i++) { dp[i][1]=1; for (int j = 1; j <= n; j++) { if (i < j) { //盘子比苹果多不会增加分法 dp[i][j] = dp[i][j - 1]; } else if (i == j) { //若苹果数等于盘子数,相当于多了一个全部盘子只放一个苹果 dp[i][j] = dp[i][j - 1] + 1; } else { //盘子比苹果少,等于有一个空盘加上全部盘放上一个 dp[i][j] = dp[i - j][j] + dp[i][j - 1]; } } } //返回结果 return dp[m][n]; } int main() { int m, n; cin >> m >> n; cout << countWays(m, n); }