题解 | 放苹果
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
#include <iostream> #include <vector> using namespace std; int main() { int m, n; cin >> m >> n; vector<vector<int>> dp(m+1, vector<int>(n+1, 0)); for(int i = 0; i <= m; ++i) { //1个盘子放所有苹果 dp[i][1] = 1; } for(int j = 1; j <= n; ++j) { //0个苹果 dp[0][j] = 1; } for(int i = 1; i <= m; ++i) { for(int j = 1; j <= n; ++j) { if(j > i) dp[i][j] = dp[i][i]; //盘子多于苹果 必定有盘子为空 //苹果多于盘子分为两种情况:盘子全放满:dp[i-j][j] 和 至少有1个盘子为空:dp[i][j-1] if(i >= j) dp[i][j] = dp[i-j][j] + dp[i][j-1]; } } cout << dp[m][n] << endl; return 0; }