概念
整数分拆(Integer Partition)是指将正整数 表示为若干正整数之和的方式数。当限制加数的范围为 到 时,问题变为:用不超过 的正整数之和表示 ,有多少种不同的方法。
这是一个经典的组合计数问题,可以转化为 完全背包 DP 来求解。
核心思想
背包 DP 建模
将 看作 种物品,每种物品可以使用无限次(完全背包),物品 的”重量”为 ,背包容量为 ,求恰好装满背包的方案数。
状态定义: 表示用当前可用的物品恰好凑出总和 的方案数。
转移方程(完全背包正序枚举):
初始条件:(空分拆,即什么都不选是一种方案)。
有序与无序
- 无序分拆(标准整数分拆): 和 算同一种。外层枚举物品 ,内层枚举容量 。
- 有序分拆(组合数):顺序不同算不同方案。此时不分层枚举物品,直接对所有 同时转移。
大数问题
当 和 较大时,方案数会非常大,通常需要高精度(大整数)运算或取模。
时间复杂度
空间复杂度(滚动数组优化后):。
适用场景
- 组合计数类问题
- 整数拆分的方案数统计
- 可转化为完全背包的方案计数问题
- 数论中分拆函数 的计算