整数划分的几个基本思路

1.将n划分成不大于m的划分法
多个整数可以相同:dp[n][m] = dp[n][m-1] (划分数中每个数都小于m)+ dp[n-m][m] (划分数中有一个是m)

多个整数不可相同:dp[n][m] = dp[n][m-1] (划分数中每个数都小于m)+ dp[n-m][m-1] (划分数中有一个是m则m变成m-1,m只能出现一次)

2.将n划分成k个数的划分数:
k个数相同:
划分成k个正整数: dp[n][k] = dp[n-1][k-1] (k个数中有个是1) + dp[n-k][k]
k个数中没有1且都大于1:于是将k个1剪掉也相当于先在k个数中都放一个1.

k个数不同:
dp[n][k] = dp[n-k][k] + dp[n-k][k-1];

3.将n划分成k个奇数或偶数的划分数
设划分成k个偶数的为 g[n][k]; g[n][k] = f[n-k][k];
偶数没有1:所有只有这一种情况:先放k个1,于是还需要k个奇数(奇+1=奇)f[n-k][k];
设划分成k个奇数的为 f[n][k]; f[n][k] = g[n-k][k] + f[n-1][k-1];
奇数有1,第一种是没有1,先放k个1于是 在n-k中还需要k个偶数
第二种是有1,于是从n-1中还要要k-1个奇数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值