timus 1017

来源:互联网 发布:如何评价三国演义 知乎 编辑:程序博客网 时间:2024/05/03 06:15

思路 :

     给N个砖块。按要求求有多少种堆放的形式。

     我们只考虑 N块砖 最后一列J 块砖时 res[N][J] ( J = 1 N - 1 )      且易知res[N][N] = 1

     要求 res[N][J]等价于求 res[N - J][K] 有几种形式。( K = 1 ~ N - J  && K < N - J && K < J )

     因此方程为res[N][J] += res[N - J][K]  (  K = 1 ~ N - J&& K < J )




#include <stdio.h>                                                                                long long res[501][501];int n;                              int main ( ) {        for ( int i = 1; i <= 500; ++i ) res[i][i] = 1;                      for ( int i = 2; i <= 500; ++i )        for ( int j = 1; j < i; ++j )            for ( int k = 1; k <= i - j; ++k )                if ( k < j ) res[i][j] += res[i - j][k];                      while ( scanf ( "%d", &n ) != EOF ) {        long long int sum = 0;        for ( int i = 1; i < n; sum += res[n][i], ++i ) ;                          printf ( "%lld\n", sum );    }             }       





原创粉丝点击