zoukankan      html  css  js  c++  java
  • LETTers比赛第八场:第一题

      这个题等价于求将长度为2k的序列A = {1,2,...,2k}划分为两个长度为k的递增子序列B = {b1,b2,...,bk} 和 C = {c1,c2,...,ck},对任意i属于1到k满足bi < ci 的划分方式总数。

      一个满足条件的划分等价于:

      有两个栈,一个叫A,一个叫B,元素从小到大依次入栈,但是必须满足B栈的长度在任意时刻不小于A栈的长度。比如,如果有六个数1到6,则下图是一种入栈方式:

      很明显,这是一个Catalan数了。

    View Code
     1 #include <stdio.h>
     2 const int MAX = 41;
     3 long long num[MAX][MAX];
     4 
     5 void init(){
     6     int i,j;
     7     num[0][0] = 1;
     8     for(i = 1;i < MAX;i++){
     9         for(j = 0;j <= i;j++){
    10             if(i == j || j == 0){
    11                 num[i][j] = 1;
    12             }
    13             else{
    14                 num[i][j] = num[i-1][j-1] + num[i-1][j];
    15             }
    16         }
    17     }
    18 }
    19 
    20 int main()
    21 {
    22     int n;
    23     init();
    24     while(~scanf("%d",&n)){
    25         printf("%I64d\n",num[n][n/2]/(n/2+1));
    26     }
    27     return 0;
    28 }
    29 
    30             

      

  • 相关阅读:
    微软BI 之SSAS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSAS 系列
    微软BI 之SSIS 系列
    微软BI 之SSRS 系列
    微软BI 之SSAS 系列
    微软BI 之SSAS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
  • 原文地址:https://www.cnblogs.com/LETTers/p/2474299.html
Copyright © 2011-2022 走看看