题解 | #放苹果#

放苹果

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

#include <iostream>
#include <vector>
using namespace std;
int f(int a, int b) {
    vector<vector<int>> dp(a + 1, vector<int>(b + 1,
                           0)); //dp[i][j]表示i个苹果放在j个盘子的分法
    for (int i = 1; i <= b; ++i) {
        dp[0][i] = 1;//0个苹果只有一种分法
    }
    for (int i = 1; i <= a; ++i) {
        for (int j = 1; j <= b; ++j) {
            if(i < j)
            dp[i][j] = dp[i][j - 1];
            else
                dp[i][j] = dp[i][j - 1] + dp[i - j][j];//(有一个盘子为空)+(没有盘子为空,每个盘子至少有一个苹果)
        }
    }
    return dp[a][b];

}
int main() {
    int a, b;
    while (cin >> a >> b) {
        cout << f(a, b) << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务