You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python动态规划分组计数函数结果不符,求调试解决

问题排查与代码修正

核心问题分析

你的代码存在两个关键错误:

  1. 递推公式错误:你使用了(j-2)*table[i-1][j] + (j-1)*table[i-1][j-1],但符合问题要求的正确递推式应为G(n,k) = G(n-1,k-1) + k × G(n-1,k)。
  2. 遗漏基础条件判断:未处理k < 3的情况——由于三胞胎必须分在不同组,分组数至少为3,否则方案数为0。

递推式推导依据

问题要求三胞胎必须分在不同组,新增的普通学生有两种分组选择:

  • 单独成立一个新组:对应方案数G(n-1,k-1)(前n-1个学生已分成k-1个合法组)
  • 加入已有的k个组中的任意一个:对应方案数k × G(n-1,k)(每个组都可以接收这个普通学生)

修正后的代码

def count_partitions(n, k):
    # 基础条件:分组数不足3,或学生数少于分组数,均无法合法分组
    if n < k or k < 3:
        return 0
    # 3个三胞胎分3组,仅1种方案
    elif n == k == 3:
        return 1
    
    # 初始化DP表,所有元素默认0
    table = [[0] * (k + 1) for _ in range(n + 1)]
    table[3][3] = 1  # 初始合法状态
    
    # 填充DP表
    for i in range(4, n + 1):
        for j in range(3, k + 1):
            # 应用正确的递推公式
            table[i][j] = table[i-1][j-1] + j * table[i-1][j]
    
    return table[n][k]

验证结果

  • count_partitions(4, 3) → 3(符合预期)
  • count_partitions(5, 3) → 9(符合预期)
  • count_partitions(6, 4) → 37(符合预期)

内容的提问来源于stack exchange,提问作者Muhammad Daud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:02:09