http://codeforces.com/problemset/problem/9/D

题目大意:给你一个二叉树和n个数字,满足左小右大,能形成多少种不同的二叉树

思路:定义dp[i][j]表示目前有i个节点,根节点为i,深度为j。

然后我们就暴力枚举顶点i,然后以他为树根,再暴力一下左右两个子树就好了。

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int maxn = + ;
int n, H;
LL dp[maxn][maxn];
/*
定义dp[i][j]表示目前结点,深度为j
dp[i][j] = sigma(dp[i - k - 1][j - z - 1] * dp[k][z]);
*/ int main(){
cin >> n >> H;
for (int i = ; i <= n; i++) dp[][i] = ;
for (int i = ; i <= n; i++){
for (int h = ; h <= i; h++){///目前i个组成的最大层数
for (int j = ; j < i; j++){///left的个数
for (int l = ; l <= j; l++){///left的最大层数
for (int r = ; r <= i - j - ; r++){///右边的最大层数
if ( + max(l, r) == h){
dp[i][h] += dp[j][l] * dp[i - j - ][r];
}
}
}
}
}
}
LL ans = ;
for (int i = H; i <= n; i++)
ans += dp[n][i];
printf("%lld\n", ans);
return ;
}

不过我貌似看到了卿学姐写的更加简单,定义的也更加简单

http://www.cnblogs.com/qscqesze/p/5414271.html

定义dp[i][j]表示目前深度小于等于i,有j个节点的所有二叉树的种类数,然后容斥一下就好了

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int maxn = + ;
int n, H;
LL dp[maxn][maxn];
/*
定义dp[i][j]表示目前深度小于等于i,有j个节点的所有二叉树的种类数
dp[i][j] = sigma(dp[i - 1][j - k - 1] * dp[i - 1][j - k]);
*/ int main(){
cin >> n >> H;
for (int i = ; i <= n; i++) {///目前深度为i
dp[i][] = ;
for (int j = ; j <= n; j++){///总节点数
for (int k = ; k < j; k++){///左边节点的个数
dp[i][j] += dp[i - ][k] * dp[i - ][j - k - ];
}
}
}
printf("%lld\n", dp[n][n] - dp[H - ][n]);
return ;
}

dp + 组合数 Codeforces Beta Round #9 (Div. 2 Only) D的更多相关文章

  1. 暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table

    题目传送门 /* 题意:求最大矩形(全0)的面积 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 详细解释:http://www ...

  2. Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】

    Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...

  3. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  4. Codeforces Beta Round #67 (Div. 2)

    Codeforces Beta Round #67 (Div. 2) http://codeforces.com/contest/75 A #include<bits/stdc++.h> ...

  5. Codeforces Beta Round #59 (Div. 2)

    Codeforces Beta Round #59 (Div. 2) http://codeforces.com/contest/63 A #include<bits/stdc++.h> ...

  6. Codeforces Beta Round #52 (Div. 2)

    Codeforces Beta Round #52 (Div. 2) http://codeforces.com/contest/56 A #include<bits/stdc++.h> ...

  7. Codeforces Beta Round #49 (Div. 2)

    Codeforces Beta Round #49 (Div. 2) http://codeforces.com/contest/53 A #include<bits/stdc++.h> ...

  8. Codeforces Beta Round #46 (Div. 2)

    Codeforces Beta Round #46 (Div. 2) http://codeforces.com/contest/49 A #include<bits/stdc++.h> ...

  9. Codeforces Beta Round #40 (Div. 2)

    Codeforces Beta Round #40 (Div. 2) http://codeforces.com/contest/41 A #include<bits/stdc++.h> ...

随机推荐

  1. android 操蛋的gradle

    首先看语法: -include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {cl ...

  2. 打开新世界的第一步:学习servlet

    什么是servlet? 是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 创建servlet 一.创建一个web project 1)流程:eclipse-F ...

  3. linux中找不到/etc/sysconfig/iptables

    解决办法初始化iptables. #iptables -F #service iptables save #service iptables restart

  4. Linux常用命令及重要目录文件分析总结

    1.用户切换和更改密码 sudo -i / sudo su --->切换到root用户 su user --->从root用户切换回普通用户(/home/user) sudo passwd ...

  5. WebService第二天

    WebService第二天 课程安排:(CXF+HESSIAN) 框架CXF概述(是什么,SOA概述,下载安装) CXF快速入门(服务端.客户端开发,日志拦截器,SOAP版本相互调用的) CXF与sp ...

  6. apache 安装[转]

    Apache简介         Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广 ...

  7. spoj1811:Longest Common Substrin

    题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=2796 把一个字符串做出后缀自动机,另一个字符串与之匹配. #include<cs ...

  8. hdu_5950_Recursive sequence(矩阵快速幂)

    题目链接:hdu_5950_Recursive sequence 题意:递推求解:F(n) = 2*F(n-2) + F(n-1) + n4 和F(1) = a,F(2) = b: 题解: 一看数据范 ...

  9. 自定义MVC框架(一)-(没有基于xml的)

    0.创建oracle的sql语句如下 --创建表 create table userinfo(id number primary key,uname varchar2(20),password var ...

  10. kettle连接mysql

    kettle连接mysql时出现问题