zoukankan      html  css  js  c++  java
  • 51nod 1412 AVL数的种类(DP

    题意给了n个节点 问AVL树的种类

    卧槽 真的好傻 又忘记这种题可以打表了  就算n^3 也可以接受的

    树的深度不大

    那么转移方程很明显了

    dp[i][j]   代表的是节点为n深度为j的树的种类

    k为左子树的节点个数

    //dp[i][j+1] += dp[k][j]*dp[i-k-1][j];
    //dp[i][j+1] += 2*dp[k][j-1]*dp[i-k-1][j];

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <math.h>
    using namespace std;
    const long long MOD = 1000000007;
    typedef long long ll;
    ll dp[2100][30];//i  表示个数 j表示深度
    ll check(int x,int y)
    {
        return 0;
    }
    void init()
    {
        dp[0][0] = dp[1][1] = 1;
        //dp[i][j+1] += dp[k][j]*dp[i-k-1][j];
        //dp[i][j+1] += 2*dp[k][j-1]*dp[i-k-1][j];
        for(int i=2;i<=2000;i++)
        {
            for(int j=0;j<=17;j++)
            {
                for(int k=0;k<i;k++)
                {
                    dp[i][j+1] += dp[k][j]*dp[i-k-1][j];
                    dp[i][j+1] += 2*dp[k][j-1]*dp[i-k-1][j];
                    dp[i][j+1]%=MOD;
                }
            }
        }
    }
    int main()
    {
        // 0 0
        // 1 1
        // 2 2
        // 3 
    
        init();
        int n;
        cin>>n;
        ll ans = 0;
        for(int i=0;i<30;i++)
        {
            ans += dp[n][i];
        }
        cout<<ans%MOD<<endl;
        return 0;
    }
    AC代码
  • 相关阅读:
    字符串的问题(strstr和strncpy 水题)
    数一数(KMP+思维)
    栗酱的数列(KMP+思维)
    D. Almost All Divisors(思维)
    E. Two Arrays and Sum of Functions(贪心)
    好位置(思维)
    Just A String(kmp)
    Dubbo简介
    lambda表达式快速创建
    分布式RPC系统框架Dubbo
  • 原文地址:https://www.cnblogs.com/Geek-xiyang/p/5990634.html
Copyright © 2011-2022 走看看