题解 | #数的划分#

数的划分

http://www.nowcoder.com/practice/24c2045f2cce40a5bf410a369a001da8

设f(i,j)为i分成j份的方案数
初值:
当j=1以及i=j时f(i,j)=1
递推:
两种情况

1.j份中至少一个是1,方案数为f(i-1,j-1)
2.j份中一份1都没有,考虑将i-j分为j份,再往j份中的每一份+1,方案数为f(i-j,j)

故有递推式:
f ( i , j ) = f ( i − 1 , j − 1 ) + f ( i − j , j ) f(i,j)=f(i-1,j-1)+f(i-j,j)
f(i,j)=f(i−1,j−1)+f(i−j,j)

    public int divideNumber (int n, int k) {
        // write code here
        int[][] dp = new int[n + 1][k + 1];
        dp[0][0] = 1;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= k; j++){
                if(i >= j){
                    dp[i][j] = dp[i - j][j] + dp[i - 1][j - 1];
                }
            }
        }
        return dp[n][k];
    }
全部评论
都没有取模
点赞 回复 分享
发布于 2022-04-21 12:51

相关推荐

11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
头像
10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
评论
7
2
分享
牛客网
牛客企业服务