数划分

作者: 无聊的刷题 | 来源:发表于2016-04-24 21:44 被阅读0次
有 n 个无区别的物品,将他们划分成不超过 m 组,求划分方法数。

这个应该也算是一个入门级的 DP 题,但是对于初学的我来说状态还是不是很好想到。
开始我想嘛,这个简单嘛

f[i][j] 表示数字 i 的 j 的划分
f[i][j] = sum(f[i - k][j - 1]) k = 0..i

想的很简单,就是我把数字 k 作为一份,把剩下的 i - k 分为 j - 1 份,感觉对的哒!
不过问题来了,
比如 1+1+2和1+2+1这种就算重复了,我们这个关系不对,会多算。

后来看了这么做之后也想了好久,
我们可以这样划分状态:

f[i][j] 表示数字 i 的不超过 j 的划分有多少个
f[i][j] = f[i - j][j] + f[i][j - 1]

很莫名其妙的一个递推式,我看了好久(智商低就这样,没办法T_T)
是这样来的,首先我们考虑有 j 个划分!
那么

a1+a2+..+aj == i

那么如果把每个都减一的话就正好是 f[i-j][j] 的划分个数,我们可以由f[i-j][j]得到i正好有j个划分的情况。
如果其中有ai为0,那么其划分为 f[i][j-1],因为有一个数为0,就最多有j-1个划分啦,我们的状态是f[i][j]不超过j的划分,所以f[i][j-1]就包含了所有有ai为0的情况。

所以状态的划分和转移很重要,设计错了就很麻烦。

相关文章

  • 数划分

    这个应该也算是一个入门级的 DP 题,但是对于初学的我来说状态还是不是很好想到。开始我想嘛,这个简单嘛 想的很简单...

  • 诗词创作技巧系列12:语言技巧3

    词类划分与词性定位 当代西方语法,词类划分为名、动、形、副、介、连、数、量、叹词等,古典诗词词类划分较为简单,词类...

  • 花榭月朦胧|判断单词读音的三个步骤

    一、数元字组的个数 数一数元字组的数目。有几个元字组就有几个音节。 二、划分音节 划分音节时以元字组为核心。 三、...

  • 秘境:划分定位

    当代西方语法,词类划分为名、动、形、副、介、连、数、量、叹词等,古典诗词词类划分较为简单,词类仅划分为实字词虚字词...

  • 快速排序(c#)

    快速排序法 操作 1.用Partition()函数取得划分数,严的教材该数选的是数组第一个数。 2.将小于划分树的...

  • 「数仓建设」主题域划分

    大家好,本篇聊一下数仓建设,讲一下面试常遇到的主题域与主题划分,更多精彩文章优先从微信公众号《大数据阶梯之路》首发...

  • 根据给定的值划分数组

    算法描述 给定一个数组和一个数k,划分数组,似的左边的值都小于k,右边的数大于等于k,返回划分数组的位置,例:[3...

  • SQLite 初学

    pragma mark - 01 SQLite数据划分 pragma mark - 02 创建数据表格 DDL:数...

  • sklearn数据集的获取与划分

    划分数据集 获取sklearn本地的数据集 描述iris数据集 从网络获取数据集 网络获取 划分训练集和测试集 数...

  • 整型 的范围

    整型数按照位数划分,可以分为8位、16位、32位、64位等。其表示的范围如下。 整型数 范围 in...

网友评论

      本文标题:数划分

      本文链接:https://www.haomeiwen.com/subject/znpfrttx.html