KY41 放苹果

发布时间:2024年01月13日

ti
DP 可能算板子题?
当果子数小于盘子数时,i个盘子放j个果子,和i-1个盘子放j个果子方案数一样
当盘子数小于果子数时,考虑新加入的盘子要不要放果子,不放果子dp[i - 1][j],放果子就是每个盘子都要有果子的情况下,再看i个盘子放j-i个果子的方案数

#define ll int
#define vec vector<ll>
#define MAX 15
#define inf 0x3fffffff

ll dp[MAX][MAX];

int main() {
    ll M, N;
    while (cin >> M >> N) {
        memset(dp, 0, sizeof(dp));
        dp[0][0] = 1;
        for (int i = 1; i <= N; i++) {  //n个盘子
            //j从零开始,也就是每行的第一列都是1 dp[i][0]=1 因为盘子可以为空
            for (int j = 0; j <= M; j++) {  //m个苹果 
                if (j >= i)dp[i][j] = dp[i - 1][j] + dp[i][j - i];  //如果果子数量大于盘子数量
                else dp[i][j] = dp[i - 1][j];  //如果果子数量小于盘子数量,多出来这个盘子只能空着
            }
        }
        cout << dp[N][M] << endl;
    }
}
文章来源:https://blog.csdn.net/qiaodxs/article/details/135566887
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。