关于一些数的划分问题

问题一:将n划分为若干正整数之和,有多少种划分方法?(hdu1028)

思路一:相当于1-n的完全背包,总重量为n,有多少种组合?

思路二:dp[i][j]表示将i分为最多j组的划分方法数

        转移方程为:dp[i][j] = dp[i][j-1] + dp[i-j][j] (i < j)  //前者表示至多分成j-1份,后者表示分成j份(将i-j分成j份,剩下的j分成j个1加到刚刚的j份)

        dp[i[j] = dp[i][j-1] + 1(i = j)

        dp[i][j] = dp[i][i] (j > i)


问题二:将n划分为m个正整数之和,有多少种划分方法?

思路一:相当于1-n的完全背包,不过加了一维状态(二维费用背包)

思路二:dp[i][j]表示将i分为j组的划分方法数

        转移方程为:dp[i][j]  = dp[i-1][j-1] + dp[i-j][j](j <= i) //前者表示先分出一个1作为一份,然后剩下的i-1分成j-1份(至少有一个1),后者表示先分出j个1再将i-j分成j份,将他们加进去

     dp[i][j] = 0(j > i)


问题三:将n划分为最大数不超过k的划分数

完全背包,不过可选范围变成1-k


问题四:将n划分为若干奇正整数之和

思路一:g[i][j]:将i划分为j个偶数;f[i][j]:将i划分为j个奇数
     g[i][j] = f[i - j][j];f[i][j] = f[i - 1][j - 1] + g[i - j][j];
         方法可以分为两类:
       第一类:i中拿出j个1分到每一份中,将剩余的i-j分成j个奇数
       第二类:一份包含奇数1,剩余的i-1分成j-1个奇数;另一种,每份至少大于1,将j个1拿出来分到每一份中,其余i-j分成j份

思路二:完全背包问题


问题五:将n划分为若干不同整数之和,有多少种?

思路一:0/1背包问题

思路二:dp[n][m]= dp[n][m-1]+ dp[n-m][m-1]   dp[n][m]表示整数 n 的划分中,每个数不大于 m 的划分数。

    分两种情况:
      a.划分中每个数都小于m,相当于每个数不大于 m-1,划分数为 dp[n][m-1].
      b.划分中有一个数为 m.在n中减去m,剩下相当对n-m进行划分,

   并且每一个数不大于m-1,故划分数为 dp[n-m][m-1]



生成函是一个非常有用的工具,可以帮助我们解决许多组合问题,其中包括整划分问题。下面是一些生成函解决整划分问题的示例: 1. 计问题 给定一个正整n,将n划分成一些正整的和,问有多少种不同的划分方法?例如,对于n=4,有5种不同的划分方法:4,3+1,2+2,2+1+1,1+1+1+1。 解决这个问题的生成函是: (1+x+x^2+x^3+...)(1+x^2+x^4+...)(1+x^3+x^6+...)... 其中,第一个因子表示划分中的第一个元素可以是1,2,3,...,第二个因子表示第二个元素可以是2,4,6,...,第三个因子表示第三个元素可以是3,6,9,...,以此类推。 我们可以使用Euler的公式把生成函展开成一个无限级: (1+x+x^2+x^3+...)(1+x^2+x^4+...)(1+x^3+x^6+...)... = (1+x+x^2+...)(1+x^2+x^4+...)(1+x^3+x^6+...)... /(1-x)(1-x^2)(1-x^3)... 在这个无限级中,每一项的系都表示对应划分中各个部分的个。因此,这个问题的答案就是这个级的第n项系。 2. 构造问题 给定一个正整n,问是否可以将n划分成一些正整的和,使得每个都小于等于m?例如,当n=6,m=3时,可以划分成4种方法:3+2+1,3+1+1+1,2+2+2,2+2+1+1。 解决这个问题的生成函是: (x+x^2+x^3+...+x^m)(x+x^2+x^3+...+x^m)(x+x^2+x^3+...+x^m)... 其中,每个因子都表示这个可以是1,2,3,...,m中的任意一个。 我们可以展开这个生成函,然后提取出每一项的系。如果第n项的系为0,则说明划分不存在。 这些就是一些使用生成函解决整划分问题的例子。当然,生成函在组合学中的应用远不止这些,它们是求解组合问题的重要工具之一。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值