AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 900. 整数划分

作者: 作者的头像   Qiner ,  2025-06-10 09:22:48 · 湖北 ,  所有人可见 ,  阅读 7


1


AcWing 900. 整数划分

题意:

将正整数n分解为若干个正整数的和,问有多少种组合

做法 (我发现的就有4种)

算法1. f[i][j] 表示前面$i$个数的和是$j$的方案数

其实就是完全背包的变形题
可以将题意转化为:有 $1, 2, \ldots, n$ 这n个物品,每个物品都可以选无数次,问选出来的物品的体积之和恰好为$n$的方案数

状态转移: f[i][j] = f[i][j - i] + f[i - 1][j]

扩展:若每个数字均要求互不相同,则问题变为 0-1背包

扩展:第一维i从小到大遍历求的是组合数,若求排列数就只能第一维j从小到大遍历

算法2. f[i][j] 表示任意$i$个正整数的和是$j$的方案数

注意与【算法1】的区别,他是考虑前i个数中选数,但是选的个数不一定是i,【算法2】是一定选i个数,不一定是从前i个数中选择

具体分析见下图(不得不说这种f[i][j]集合划分方式真是神之一手)

整数划分.png

算法3. f(n, m) 表示每个数都不超过m,且和为n的方案数

这个留着以后补充吧,递推方程也挺简单想的到的

算法4. dfs brute force

2 评论


用户头像
Qiner   2025-06-10 09:36 · 湖北      1    踩      回复

完全背包 –> 整数划分 – > 鸣人的影分身


用户头像
Qiner   2025-06-10 09:26 · 湖北      1    踩      回复

感觉和之前做的AcWing 1050. 鸣人的影分身好像


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息