joj1026
copy来的思想,果然自己还很菜啊
递归方程式如下(f(i,j)为i个砖头,第一排为j个的摆发):
f(i,j)=f(i-j,j+1)+f(i-j,j+2)+...+f(i-j,floor((i-j-1)/2)
#include<iostream>
#include<stdio.h>
using namespace std;
double p[501][501];
int main()
{
int i,j,k;
for(i=0;i<501;i++)
for(j=0;j<501;j++)
p[i][j]=0;
for(i=3;i<501;i++)
for(j=1;j<=(i-1)/2;j++)
p[i][j]=1;
for(i=3;i<501;i++)
for(j=1;j<=(i-1)/2;j++)
for(k=j+1;k<=(i-j-1)/2;k++)
p[i][j]+=p[i-j][k];
int n;
while(scanf("%d",&n),n)
{
double m=0;
for(i=1;i<=(n-1)/2;i++)
m+=p[n][i];
printf("%.0f\n",m);
}
}