题解 | #放苹果#

放苹果

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;
}

主要还是发现这个方程太难了

全部评论

相关推荐

用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
halux:28✌放我一条生路吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务