51nod 1412 AVL树的种类

非常简单的一道题,一眼题

枚举左儿子大小,再枚举深度即可

复杂度$O(n^2 log n)$

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

#define ri register int
#define sid 2005
#define mod 1000000007

int n, ans;
int f[sid][20];

inline void inc(int &a, int b) { 
    a += b; 
    if(a >= mod) a -= mod; 
}

int main() {
    cin >> n; 
    f[0][0] = f[1][1] = 1;
    for(ri i = 2; i <= n; i ++)
    for(ri d = 2; d <= 19; d ++)
    for(ri L = 0; L < i; L ++) {
        int R = i - L - 1;
        inc(f[i][d], 1ll * f[L][d - 1] * f[R][d - 1] % mod);
        inc(f[i][d], 1ll * f[L][d - 1] * f[R][d - 2] % mod);
        inc(f[i][d], 1ll * f[L][d - 2] * f[R][d - 1] % mod);
    }
    for(ri i = 1; i <= 19; i ++) inc(ans, f[n][i]);
    printf("%d\n", ans);
    return 0;
}

 

posted @ 2018-09-19 20:31  remoon  阅读(277)  评论(0编辑  收藏  举报