题干
C++实现
#include <iostream>
#include <string.h>
using namespace std;
int main() {
//dp[m][n]就是m个苹果放n个盘子
int dp[13][13] = {0};
int m,n;
//初始化dp数组
while(scanf("%d%d",&m,&n)!=EOF) {
memset(dp,0,13*13);
for(int i = 0; i<=m; ++i) {
dp[i][1] = 1;
}
for(int i = 0; i <= n; ++i) {
dp[1][i] = 1;
dp[0][i] = 1;
}
//i是苹果数,j是盘子数
for(int i = 2; i <= m; ++i) {
for(int j = 2; j <= n; ++j) {
if(i >= j) {
dp[i][j] = dp[i][j-1] + dp[i-j][j];
} else {
dp[i][j] = dp[i][i];
}
}
}
printf("%d\n",dp[m][n]);
}
return 0;
}