关于计数 dp 中 n 的 m 划分的理解

原创 2017年10月10日 22:43:57

问题表述

  • 有n个无区别的物品,将它们划分为不超过m组,求出划分方法数模M的余数。我们将这种划分记为 n 的 m 划分.
  • 这道题是挑战编程竞赛中 dp 专题里面的一道题, 上课的时候看了半天一直没明白为什么状态转移方程的推导是那个样子的. 回到实验室的时候看着别人的文章突然想明白了, 所以在这里记录一下.

解法

  • 我们将 dp[i][j] 定义为 j 的 i 划分.
  • 对于 n 的 m 划分来说, 其可以划分为{ai}, 这是一个由ai组成的集合, 其中mi=1ai=n, 然后我们讨论 {ai}的值的分布情况

ai{ai},ai>0

  • 此时, size({ai})=size({ai1})
  • 对此, 我们就有 n 的 m 划分就等价于 n-m 的 m 划分, 即有 dp[m][n] = dp[m][n-m]

ai{ai},ai=0

  • 只要存在一项 ai=0, 原问题其实就相当于 n 的 m-1 划分, 即 dp[m][n] = dp[m-1][n]
  • 这里或许会有人疑问, 为什么不考虑ai=0的项大于1的时候, 其实这里也是我上课的时候困惑的地方. 事实上, 多出来的ai=0 的项已经被包含在 n 的 m-个物品1划分中, 因为所谓的划分就是将 n 划分到不超过 m-1组中.

总结

  • 综上, dp 的转移方程为两种可能的相加, 即 dp[m][n] = dp[m-1][n] + dp[m][n-m], 我们就得到原问题的解啦.

参考

n 的 m 划分递推

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【经典dp】n数填m空,括号序列取第k项,最长非降序列计数及枚举,最短编辑距离

1 m个数填充n个space,每个数至少出现一次。 #include using namespace std; typedef long long int ll; ll a[101][10...

【HDU5565 BestCoder Round 62 (div1)C】【STL or 二分答案 or 计数排序】Clarke and baton n个人减肥m次求最后异或值

【HDU5565 BestCoder Round 62 (div1)C】【优先队列做法】Clarke and baton n个人减肥m次求最后异或值 #include #include #i...

2017.11.3 N盘M柱汉诺塔问题通解 DP 解题报告

题目描述众所周知, 汉诺塔是一个古老又经典的游戏. 这个游戏是这样的, 你有N个大小不同的盘子和3根柱子, 一开始所有盘子都叠放在第1根柱子上, 你需要把N个盘子全都移动到第3根柱子上, 每次都可以选...

DP一个数k加上n次a而且乘上m次b,然后再对p取余最大

Problem H Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

hdu 2929 有n根火柴, 要求组成一个七段数码组成的十进制数, 要求此数是m的倍数, 问此数最大为多少 DP

Problem Description Bob has n matches. He wants to compose numbers using the following scheme (th...

HDU-4359-DP+C(n, m)大数求

比赛的时候一直在敲这道题。一开题就盯住这个名字了。有人说他说是 treeDP 不一定真的是 treeDP。 总有时候别人会给你很诚恳的忠告。却只因自己陷得太深无法自拔。关键是自己不想出去。 跑题了...
  • walk_up
  • walk_up
  • 2012年08月11日 15:13
  • 2109

(Relax DP1.4)UVA 10648 Chocolate Box(求将n个巧克力放在m个盒子中的概率)

/* * UVA_10648.cpp * * Created on: 2013年12月17日 * Author: Administrator */ #include #inc...

HDU1028Ignatius and the Princess III(一个数有多少种组合方式,DP)与放n个苹果在m个盘子有多少生种组合一样(两种方法解)

Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

ZOJ 3662 Math Magic(构造K个和为N且最小公倍数为M的正整数的方案数/dp)

题目链接: ZOJ 3662 Math Magic 题意: 求构造K个和为N且最小公倍数为M的正整数的方案数。 1...
  • Ramay7
  • Ramay7
  • 2016年04月15日 21:45
  • 176

N*M格子捡苹果DP算法python

直接代码: a = [[5, 8, 5, 7, 1, 8], [1, 3, 2, 8, 7, 9], [7, 8, 6, 6, 8, 7], [9, 9, 8, 1,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于计数 dp 中 n 的 m 划分的理解
举报原因:
原因补充:

(最多只允许输入30个字)