点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int mod=1000000007;
const int inv2=500000004;
const int inv3=333333336;
long long f[405];
int power(int n,int p)
{
if(p==0)
{
return 1;
}
else
{
long long tmp=power(n,p/2);
if(p%2==0)
{
return tmp*tmp%mod;
}
else
{
return tmp*tmp%mod*n%mod;
}
}
}
int c(long long n,int m)
{
if(m==2)
{
return (n*(n-1)/2)%mod;
}
else
{
return n*(n-1)%mod*(n-2)%mod*inv2%mod*inv3%mod;
}
}
int main()
{
int n;
cin>>n;
f[0]=1;
f[1]=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<i;j++)
{
for(int k=j;j+k<i;k++)
{
int l=i-j-k-1;
if(l<k)
{
break;
}
if(j==l)
{
f[i]+=c(f[j]+3-1,3);
}
else if(j==k)
{
f[i]+=(c(f[j]+2-1,2)*f[l]%mod);
}
else if(k==l)
{
f[i]+=(f[j]*c(f[k]+2-1,2)%mod);
}
else
{
f[i]+=(f[j]*f[k]%mod*f[l]%mod);
}
f[i]%=mod;
}
}
}
cout<<f[n]<<endl;
return 0;
}