#include<bits/stdc++.h>
#define maxn 35
using namespace std;
typedef long long ll;
ll dp[maxn][maxn];
ll f[maxn];
ll C(ll m,ll n)
{
double ret=1;
for(ll i=0;i<n;i++)
ret*=m-i;
for(ll i=1;i<=n;i++)
ret/=i;
return ll(ret+0.5);
}
void init()
{
ll n=30;
for(ll i=0;i<=n;i++)
{
dp[i][0]=1;
if(i) dp[i][1]=1,dp[0][i]=0;
}
f[1]=1;
for(ll i=1;i<=n;i++)
{
for(ll j=2;j<=n;j++)
for(ll k=0;k*i<=j;k++)
dp[i][j]+=C(f[i]+k-1,k)*dp[i-1][j-k*i];
f[i+1]=dp[i][i+1];
}
}
int main()
{
init();
ll n;
while(scanf("%I64d",&n)==1&&n)
printf("%I64d\n",n==1?1:2*f[n]);
return 0;
}
动态规划(串并联网络,uva 10253)
最新推荐文章于 2020-11-25 15:58:11 发布