题解 | 放苹果

放苹果

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

#include <bits/stdc++.h>
using namespace std;
int main(){
    int m, n;
    while(cin >> m >> n){
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); //dp[i][j]表示i个苹果放在j个盘子的分法
        for(int i = 1; i <= n; i++)
            dp[0][i] = 1; //0个苹果只有1种分法
        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= n; j++){
                if(i < j)
                    dp[i][j] = dp[i][j - 1];
                    //苹果数少于盘子数,则等于它前一个盘子时的分法,因为这个盘子相当于常空着,没有用
                else
                    dp[i][j] = dp[i][j - 1] + dp[i - j][j];
                    //等于上一个盘子的数量(即相当于至少有这个盘子是空的)加上苹果数减去盘子数且盘子数不变时的分法
            }
        cout << dp[m][n] << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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