动态规划的入门练习
#include<stdio.h>
#include<vector>
using namespace std;
int main() {
int m, n;
while (scanf("%d%d", &m, &n) != EOF) {
//初始化dp
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
//0个苹果,n个盘子,只有1种分法
for (int i = 0; i <= n; i++) {
dp[0][i] = 1;
}
//m个苹果,1个盘子 ,只有一种分法
for (int i = 0; i <= m; i++) {
dp[i][1] = 1;
}
for (int i = 1; i <= m; i++) {
for (int j = 2; j <= n; j++) {
//如果苹果数小于盘数,一定有空盘
if (i < j) {
dp[i][j] = dp[i][i];
} else {
//如果苹果数大于等于盘数:至少1个空盘+没有空盘的情况
dp[i][j] = dp[i][j - 1] + dp[i - j][j];
}
}
}
printf("%d\n", dp[m][n]);
}
return 0;
}

京公网安备 11010502036488号