zoukankan      html  css  js  c++  java
  • Catalan数

    (有一个长度为2n的01序列,其中1,0各n个,要求对于任意的整数k∈[1,2n],数列的前k个数中,\ 1的个数不少于0的个数, 求对于任意一个n满足条件的串的个数。)
    dp方法:
    (f(i, j))表示存在i个0和j个1时满足条件的所有串的集合,存储数量属性

    (1. i = 0: f(i, j) = 0\ 2. j = 0: f(i, j) = 1\ 3. i < j: f(i, j) = 0\ 4. i = j: f(i, j) = f(i, j - 1)\ 5. i > j: f(i, j) = f(i - 1, j) + f(i, j - 1)\ )

    #include<iostream>
    using namespace std;
    
    const int N = 1010;
    int f[N][N];
    int n;
    
    int main(){
        cin >> n;
        
        for(int i = 0; i <= n; i ++) f[0][i] = 1;
        for(int i = 1; i <= n; i ++)
            for(int j = i; j <= n; j ++){
                f[i][j] = f[i - 1][j];
                if(j > i) f[i][j] = f[i - 1][j] + f[i][j - 1];
            }
            
        cout << f[n][n];
    }
    

    代码等价变换:

    #include<iostream>
    using namespace std;
    
    const int N = 1010;
    int f[N];
    int n;
    
    int main(){
        cin >> n;
        
        for(int i = 0; i <= n; i ++) f[i] = 1;
        for(int i = 1; i <= n; i ++)
            for(int j = i + 1; j <= n; j ++)
                f[j] += f[j - 1];
            
        cout << f[n];
    }
    

    f[0n]正好是卡特兰数的0n项

  • 相关阅读:
    AJAX学习笔记
    JQuery 学习笔记-2017.05.22
    十二.GUI
    十一.文件
    十.模块和库
    九.类的进化(魔法方法、特性和迭代器)
    八.异常
    七.类的继承
    六.函数和类
    五.条件、循环和其他语句
  • 原文地址:https://www.cnblogs.com/tomori/p/13606309.html
Copyright © 2011-2022 走看看