题解 | #放苹果#
放苹果
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);
}
查看12道真题和解析