题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
#include <iostream> #include <vector> using namespace std; int countWays(int m, int n) { std::vector<std::vector<int>> dp(n+1, std::vector<int>(m + 1, 0)); for (int i = 1; i <= n; ++i) { dp[i][0] = 1; dp[i][1] = 1; } for (int i = 1; i <= m; ++i) { dp[1][i] = 1; } for (int i = 2; i <= n; ++i) { for (int j = 2; j <= m; ++j) { if (j < i) { dp[i][j] = dp[i - 1][j]; } else { dp[i][j] = dp[i - 1][j] + dp[i][j - i]; } } } return dp[n][m]; } int main() { int a, b; while (cin >> a >> b) { // 注意 while 处理多个 case cout << countWays(a, b) << endl; } } // 64 位输出请用 printf("%lld")
正确的思路好像不是这样,废了好久凑出来的