整数划分模型

n 个数划分成 k 个的方案数

状态 f[i][j] 表示 将i划分为j的方案数

对于方案数,一般是由地推式子推的,
对于我们考虑最后一个盒子放的数为 1!1

那么最后一个数为 1 时,由于是第 j 列,那么他的方案数就是 j1列的方案数,当前这一列就放一个,对于前面的方案数不受影响
f[i1][j1]

当最后一位数是非 1时,1j 每个数至少大于 1,如果将每个数都减一,方案数变吗,答案是不变
因为对于每种可能,1j 上的数都是大于 1 的,那么减一并不会影响划分
f[ij][j]

所以转移时为f[i][j]=f[i1][j1]+f[ij][j]

n 个数划分成 k 个不相同的数的方案数

考虑最后一位为 1 的情况
上一个是 f[i1][j1] ,假若这个式子的方案数中有存在相同的 1,是不符合条件的
有第一个题的第二中情况同理可知
dp[ij][j]可以转移答案,我令j=j1 ,那么式子成为 f[i(j1)][j1], 前j1的方案数是这个,那到j上就一个 1不会差生影响,就是从i拿个1而已
则有f[i1(j1)][j]=f[ij][j],注意这的第二唯,因为后面多了一个方一的盒子,所以j1变成了j1+1
为什么这样就没有重复的 1 呢,
因为这个式子(第一问第二种请狂)的原型是 f[ij][j] 他是什么情况?,每一列上的数都是大于1的,我只不过最后面多加一个盒子(j+1),里面刚好放的是 1而已,前面的 j的盒子的数有1
所以式子为f[i][j]=f[ij][j1]+f[ij][j]

就会这两个(

本文作者:zxsoul

本文链接:https://www.cnblogs.com/zxsoul/p/14490836.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   zxsoul  阅读(72)  评论(5编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起