dp + 组合数 Codeforces Beta Round #9 (Div. 2 Only) D
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的更多相关文章
- 暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table
题目传送门 /* 题意:求最大矩形(全0)的面积 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 详细解释:http://www ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #67 (Div. 2)
Codeforces Beta Round #67 (Div. 2) http://codeforces.com/contest/75 A #include<bits/stdc++.h> ...
- Codeforces Beta Round #59 (Div. 2)
Codeforces Beta Round #59 (Div. 2) http://codeforces.com/contest/63 A #include<bits/stdc++.h> ...
- Codeforces Beta Round #52 (Div. 2)
Codeforces Beta Round #52 (Div. 2) http://codeforces.com/contest/56 A #include<bits/stdc++.h> ...
- Codeforces Beta Round #49 (Div. 2)
Codeforces Beta Round #49 (Div. 2) http://codeforces.com/contest/53 A #include<bits/stdc++.h> ...
- Codeforces Beta Round #46 (Div. 2)
Codeforces Beta Round #46 (Div. 2) http://codeforces.com/contest/49 A #include<bits/stdc++.h> ...
- Codeforces Beta Round #40 (Div. 2)
Codeforces Beta Round #40 (Div. 2) http://codeforces.com/contest/41 A #include<bits/stdc++.h> ...
随机推荐
- linux下svn目录管理
linux 下安装的svn目录文件: /data/svndata/winne/conf/passwd 是配置用户密码的文件路径
- 淘淘商城_day10_课堂笔记
今日大纲 Dubbo入门学习 使用dubbo优化单点登录系统 系统间服务调用方式 浏览器直接访问 浏览器发起请求,通过ajax或jsonp方式请求: Httpclient方式 系统与系统之间通过Htt ...
- Jmeter 多台机器产生负载
使用多台机器产生负载的操作步骤如下: (1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent .然后运行 ...
- awstats 日志分析
/tmp/awstats/awstats.ezrydel.com.conf LogFile="/usr/local/apache/domlogs/ezrydel.com" php版 ...
- hdu_5831_Rikka with Parenthesis II(模拟)
题目链接:hdu_5831_Rikka with Parenthesis II 题意: 给你一些括号的排列,必须交换一次,能不能将全部的括号匹配 题解: 模拟一下括号的匹配就行了,注意要特判只有一对括 ...
- SSH 两个表全套增删改(运动员住宿管理)
0.创建如下oracle的命令 create table HOTALINFO ( HOTALID ) not null, HOTALNAME ) not null, HOTALADDRESS ) no ...
- [POJ] 1562 Oil Deposits (DFS)
Oil Deposits Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16655 Accepted: 8917 Des ...
- Docker安装目录
操作系统为 # cat /etc/redhat-release CentOS Linux release (Core) docker安装 # yum install -y docker docker安 ...
- Storm中-Worker Executor Task的关系
Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:1. Worker(进程)2. Executor(线程)3. Task 下图简要描述了这3者之间的关 ...
- JavaScript 部分对象方法记叙 ing...