整数划分问题与五边形数定理

之前在长沙写的,发现自己又忘了,于是拿出来。。
感觉dp还比较有用,五边形数什么的也就是bike这种毒瘤出题人会考吧。。。

整数划分问题

把整数n拆成若干整数的和,问方案数。

1.完全背包:O(n^2)

2. f ( i , j ) f(i,j) f(i,j)表示j拆成i个数的方案数,有

f ( i , j ) = f ( i , j − i ) + f ( i − 1 , j − 1 ) f(i,j)=f(i,j-i)+f(i-1,j-1) f(i,j)=f(i,ji)+f(i1,j1) (放入一个1或所有数大小+1)

时间复杂度O(n^2)

​ 拓展:

​ 1)拆成两两不同的整数时,不能连续放入两个1而不进行所有数+1操作,即放入1前一次操作只能是+1,

f ( i , j ) = f ( i , j − i ) + f ( i − 1 , j − 1 − ( i − 1 ) ) = f ( i , j − i ) + f ( i − 1 , j − i ) f(i,j)=f(i,j-i)+f(i-1,j-1-(i-1))=f(i,j-i)+f(i-1,j-i) f(i,j)=f(i,ji)+f(i1,j1(i1))=f(i,ji)+f(i1,ji)

​ 因为数两两不同,最多只有 n \sqrt n n 个数( ( 1 + n ) ∗ n > n (1+\sqrt n)*\sqrt n>n (1+n )n >n),复杂度为O(n*sqrt(n))。

​ 再拓展:如果只能用 ≤ x ​ \leq x​ x的数怎么做?每次 f ( i , v ) − = f ( i − 1 , v − ( x + 1 ) ) ​ f(i,v)-=f(i-1,v-(x+1))​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值