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

给定r、min、max,如何实现计算分组组合配置数的函数?

求解满足分组大小限制的有序分组配置数

给定总数为r的元素集合(例如[1,2,3]对应r=3),需计算满足**最小分组大小a和最大分组大小b**的分组配置总数,规则如下:

  • 分组顺序不同视为不同配置,比如[1][2]和[2][1]是两种不同配置
  • 组内元素顺序不影响,比如[1,2]和[2,1]视为同一组

示例1:r=3,a=1,b=3

总共有13种配置:

Config 1: [1, 2, 3]  
Config 2: [1, 2] [3] 
Config 3: [1, 3] [2] 
Config 4: [2, 3] [1] 
Config 5: [1] [2, 3] 
Config 6: [2] [1, 3] 
Config 7: [3] [1, 2] 
Config 8: [1] [2] [3] 
Config 9: [1] [3] [2] 
Config 10: [2] [1] [3] 
Config 11: [2] [3] [1] 
Config 12: [3] [1] [2] 
Config 13: [3] [2] [1]

更多示例

  • r=7,a=2,b=7:结果为1730
  • r=7,a=2,b=3:结果为1400,包含三种分组模式:
[1,2,3], [4,5,6] 3+3 → C(7,3)*C(4,3) = 140
[1,2,3], [4,5], [6,7] 3+2+2 → C(7,3)*C(4,2)*3 = 630
[1,2], [3,4], [5,6] 2+2+2 → C(7,2)*C(5,2)*C(3,2) = 630
  • r=7,a=2,b=2:结果为630,计算方式:
C(7,2)*C(5,2)*C(3,2) = 630

核心逻辑分析

问题本质是计算所有满足分组大小在[a,b]区间内的有序集合划分数量,可拆解为两步:

  1. 枚举所有合法分组大小序列:找到所有正整数序列k₁,k₂,...,kₙ,满足k₁+k₂+...+kₙ=r且每个kᵢ∈[a,b]
  2. 计算每个序列对应的配置数:对每个序列,按顺序选取元素分组的组合数为r!/(k₁!k₂!...kₙ!),由于分组有序,无需处理重复大小的去重
  3. 累加所有序列的配置数得到最终结果

动态规划实现思路

直接枚举序列效率低下,采用动态规划更高效:

  • 定义dp[n]为n个元素满足条件的配置总数
  • 初始条件:dp[0] = 1(空元素的唯一配置是不分组)
  • 递推公式:dp[n] = sum_{k=a to min(b,n)} dp[n-k] * C(n-1,k-1)
    解释:固定第一个元素在当前组内,从剩余n-1个元素中选k-1个组成大小为k的组,剩余n-k个元素的配置数为dp[n-k],两者相乘后累加所有合法k的结果

Python实现代码

import math

def compute_configurations(r, a, b):
    # 预处理组合数C(n,k),n最大为r
    comb = [[0]*(r+1) for _ in range(r+1)]
    for n in range(r+1):
        comb[n][0] = 1
        comb[n][n] = 1
        for k in range(1, n):
            comb[n][k] = comb[n-1][k-1] + comb[n-1][k]
    
    dp = [0]*(r+1)
    dp[0] = 1  # 边界条件:0个元素有1种配置(空)
    
    for n in range(1, r+1):
        start = a
        end = min(b, n)
        for k in range(start, end+1):
            # 选k个元素作为第一个组:固定第一个元素,从剩余n-1个中选k-1个
            dp[n] += dp[n - k] * comb[n-1][k-1]
    
    return dp[r]

# 测试示例
print(compute_configurations(3, 1, 3))  # 输出13
print(compute_configurations(7, 2, 2))  # 输出630
print(compute_configurations(7, 2, 3))  # 输出1400
print(compute_configurations(7, 2, 7))  # 输出1730

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:31:34