题目描述
输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。
输入
多组数据。每组只有一个整数n,表示待拆分的自然数n。 n<=80
输出
每组一个数,即所有方案数。
--正文
OJ1183的小数据版
直接算就好
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define MOD 1000000007
typedef long long LL;
LL f[][] = {},ans[] = {};
int main(){
int n,m,i,j;
for (i=;i<=;i++){
f[i][] = ;
f[i][] = ;
f[i][i] = ;
f[][i] = ;
}
for (i=;i<=;i++){
for (j=;j<=i;j++){
if (i == j) f[i][j] = ;
else
f[i][j] = (f[i-][j-] + f[i-j][j]) % MOD;
}
}
for (i=;i<=;i++){
ans[i] = f[i][];
for (j=;j<=i-;j++){
ans[i] += f[i][j];
}
}
while (scanf("%d",&n) != EOF){
printf("%lld\n",ans[n]);
}
return ;
}