题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
#include <iostream> #include <vector> using namespace std; class Solution{ public: int distribution(int m, int n){ vector<vector<int>> dp(m+1, vector<int> (n+1,0)); //m,n要能取到 for (int i = 0; i <= m; i++){ for (int j = 1; j <= n; j++){ if (i == 0 || j==1) dp[i][j] = 1; //没有苹果,或者只有一个盘子,都是只有一种方法 else if (j > i) dp[i][j] = dp[i][i]; //苹果比盘子少,拿走多的盘子也不影响 else { //苹果比盘子多 // 无空盘子方法,每个盘子必然至少有一个,因此同时拿走一个不影响 // 有空盘子方法,至少有一个 则相当于j-1个盘子的问题 dp[i][j] = dp[i-j][j] + dp[i][j-1]; } } } return dp[m][n]; } }; int main() { int m,n; cin >> m >> n; Solution res; cout << res.distribution(m, n) << endl; return 0; }
主要还是发现这个方程太难了