将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。
Sample Input
6
Sample Output
4
题意:
用dp[i][j]表示j个数组成i的个数。
那么对于dp[i][j]每一个j来说,注意是对于每一个j来说,来源就是两个,一个就是插入j时的dp[i-j][j-1]个数。
代码:
#include<stdio.h>
int n;
int mod = 1e9 + 7;
int dp[50100][350];
int main()
{
scanf("%d", &n);
dp[0][0] = 1;
for (int i = 1; i<350; i++)
{
for (int j = 1; j <= n; j++)
{
if (j - i >= 0)
dp[j][i] = (dp[j - i][i] + dp[j - i][i - 1]) % mod;
}
}
int ans = 0;
for (int i = 1; i<350; i++)
ans = (ans + dp[n][i]) % mod;
printf("%d\n",ans);
return 0;
}