题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
#include <iostream>
#include <vector>
using namespace std;
int f(int a, int b) {
vector<vector<int>> dp(a + 1, vector<int>(b + 1,
0)); //dp[i][j]表示i个苹果放在j个盘子的分法
for (int i = 1; i <= b; ++i) {
dp[0][i] = 1;//0个苹果只有一种分法
}
for (int i = 1; i <= a; ++i) {
for (int j = 1; j <= b; ++j) {
if(i < j)
dp[i][j] = dp[i][j - 1];
else
dp[i][j] = dp[i][j - 1] + dp[i - j][j];//(有一个盘子为空)+(没有盘子为空,每个盘子至少有一个苹果)
}
}
return dp[a][b];
}
int main() {
int a, b;
while (cin >> a >> b) {
cout << f(a, b) << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")

