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);                
    }
}

posted @ 2011-11-06 20:53  DChipNau  阅读(112)  评论(0编辑  收藏  举报