整数划分问题

n 划分成若干正整数和

思路一:

f[i][j] 表示将 i 分成 j 个数字的方案数。将 i 的划分按“含不含 1” 来分成两部分。

  • 很容易可以想到,在 i1 的所有划分上添加个 1 ,就得到了 i 1 的划分。

所以,方程为:f[i][j]=f[i1][j1]+f[ij][j]

这样 f[n][1]+f[n][2]+f[n][3]+...+f[n][n] ,就是将 n 划分成若干正整数和的方案数。

思路二:

f[j][j] 表示将 i 分为每个数不大于 j 的划分。这次,我们以“含不含 j ”作为划分依据。

  • 若划分中每个数都小于 j ,划分数为 f[i][j1]

  • 若划分中有数字等于 j ,就把这个 j 去掉, ij 的每个划分上再加上这个 j 就是 i的划分, ij 的划分数就是此时 i 的划分数。注意,最大值 j 可能不止一个,此时的 ij 的划分中有可能还有 j 。所以,划分为 f[ij][j]

所以,方程为: f[i][j]=f[i][j1]+f[ij][j] f[n][n] 即为所求。

n 划分成不同正整数和

和上一问题的思路二极为相似。
f[j][j] 表示将 i 分为每个数不大于 j 的划分。这次,我们以“含不含 j ”作为划分依据。

  • 若划分中每个数都小于 j ,划分数为 f[i][j1]
    • 若划分中有数字等于 j ,就把这个 j 去掉, ij 的每个划分上再加上这个 j 就是 i的划分, ij 的划分数就是此时 i 的划分数。注意,因为此时剩下的 ij 的划分中不能再出现 j ,最大只能是 j1,因为每个数只能出现一次。所以,划分为 f[ij][j1]
    • 所以,方程为: f[i][j]=f[i][j1]+f[ij][j1] f[n][n] 即为所求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值