fjnu 1904 楼梯

来源:互联网 发布:时时动态数据展现工具 编辑:程序博客网 时间:2024/04/24 12:21
 

Description

一个小孩有N块小砖头 (5 <= N <= 500).这些小砖头能彻成不同的楼梯。这些楼梯包含着不同高度的梯级(严格按照递减顺序),不允许有(高度)相同的梯级。每一个楼梯至少包含2个梯级,每个梯级至少一块砖。 以下为N=11,N=5的例子



Your task is to write a program that reads from input file one number N and writes to output file the only number Q ?amount of different staircases that can be built from exactly N bricks.
读入N后,求出Q,即用N块砖能彻出的不同的楼梯数量。

Input

输入第一行是测试数据的组数M,
接着M行每行有一个Number N,表示有N块小砖头

Output

输出M行,每行有一个Number Q,表示用N块砖能彻出的不同的楼梯数量。

Sample Input

1212

Sample Output

995645335

 

KEY:DP,其中a[i][j]表示一共有i块,第一块为j,进行DP

 

  1. Source:
  2. #include<iostream>
  3. using namespace std;
  4. long long a[501][501];
  5. int N;
  6. void GetList()
  7. {
  8.     int n,k,i;
  9.     for(i=1;i<=500;i++)
  10.         a[i][i]=1;
  11.     for(n=2;n<=500;n++)
  12.         for(k=1;k<=n-1;k++)
  13.         {
  14.             for(i=k+1;i<=n;i++)
  15.             {
  16.                 if(n-k<=k) break;
  17.                 else
  18.                 {
  19.                     a[n][k]+=a[n-k][i];
  20.                 }
  21.             }
  22.         }
  23. }
  24. int main()
  25. {
  26.     long long sum=0;
  27.     int i,j;
  28.     GetList();
  29.     int n;
  30.     cin>>n;
  31.     for(i=1;i<=n;i++)
  32.     {
  33.         cin>>N;
  34.         sum=0;
  35.         for(j=1;j<N;j++)
  36.             sum+=a[N][j];
  37.         printf("%lld/n",sum);
  38.     }
  39.     return 0;
  40. }
  41.     
原创粉丝点击