51nod1201 整数划分

将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种。由于数据较大,输出Mod 10^9 + 7的结果即可。

Input
输入1个数N(1 <= N <= 50000)。
Output
输出划分的数量Mod 10^9 + 7。
Input示例
6
Output示例
4

 

都说这是一道经典的dp,我竟然不知道,真是太弱了。

首先我们发现把一个<=50000的N分成不同的整数最多只能分出三百多个。

我们考虑用dp[i][j]表示把i分成j个不同的数的方案数。

1、分出来的数没有1: dp[i-j][j] (相当于把i-j分成j份的所有的数+1)

2、分出来的数有1:    dp[i-j][j-1] 

所以dp[i][j]=dp[i-j][j]+dp[i-j][j-1]

真是玄妙。

posted @ 2017-12-25 15:03  shixinyi  阅读(193)  评论(0编辑  收藏  举报