首页 > 试题广场 >

数的划分

[编程题]数的划分
  • 热度指数:4997 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
将整数 n 分成 k 份,且每份不能为空,任意两个方案不能相同(不考虑顺序)。
例如: n=7,k=3 ,下面三种分法被认为是相同的。



问有多少种不同的分法, 答案对 109 + 7 取模。

数据范围: 
进阶:空间复杂度 ,时间复杂度
示例1

输入

7,3

输出

4
示例2

输入

6,2

输出

3
class Solution:
    def divideNumber(self , n: int, k: int) -> int:
        mod = 10**9 + 7
        # dp[i][j] 表示将整数i分成j份
        dp = [[0]*(k+1) for _ in range(n+1)]    
        for i in range(k+1):
            dp[i][i] = 1

        for i in range(1,n+1):
            for j in range(1,min(i,k)+1):
                dp[i][j] = (dp[i-j][j] + dp[i-1][j-1]) % mod
        return dp[n][k]

发表于 2025-01-13 16:10:10 回复(0)

问题信息

上传者:牛客301499号
难度:
1条回答 5238浏览

热门推荐

通过挑战的用户

查看代码
数的划分