Codeforces_9D-How many trees?
2012-11-16 02:06
363 查看
/**题目大意:给定1~n各节点,建立二叉搜索树,求树的深度大于等于h的个数 *本题纠结一天未果,最后根据某大牛的思路写来了。 *状态转移方程: dp [h] = sum{dp[i][h-1] * dp[n-i-1][h-1]}; *其中: n为数的节点数, h数的深度, dp [h]为以n个节点建立的深度不大于 *h的树的个数; i为左子树的节点数, n-i-1为右子树的节点数, 左子树的 *总数乘以右子树的总数即为该二叉树的总数。 *初始状态: dp[i][0] = 0; dp[0][i] = 1; (0<=i<n) *打表求出所有解,然后dp - dp [h-1] 即为深度大于h的个数 * (不大于n的减去不大于h-1) */ #include <cstdio> using namespace std; #define MAX 36 long long dp[MAX][MAX]; void binary_search_tree(){ for(int h = 1; h < MAX; h ++){ dp[0][h-1] = 1; for(int n = 1; n < MAX; n ++){ for(int i= 0; i < n; i ++){ dp [h] += dp[i][h-1] * dp[n-i-1][h-1]; } } } } int main(int argc, char const *argv[]) { #ifndef ONLINE_JUDGE freopen("test.in", "r", stdin); #endif binary_search_tree(); int n, h; while( ~scanf("%d %d", &n, &h) ){ printf("%lld\n", dp - dp [h-1]); } return 0; }
相关文章推荐
- CodeForces 9 D.How many trees?(dp)
- Codeforces_9D_How many trees?
- How Many Trees?
- HDU How Many Trees
- HDU 1130 How Many Trees?
- UVA 10303 - How Many Trees?(数论 卡特兰数 高精度)
- UVA 10303 How Many Trees?
- HDU1130_How Many Trees?(卡特兰数 _java)
- hdu 1130 How Many Trees
- UVa 10303 - How Many Trees?
- (hdu step 2.3.4)How Many Trees?(大数:求n个节点能够成多少棵二叉树)
- hdu 1130 How Many Trees?
- hdu 1130 How Many Trees?
- HDOJ HDU 1130 How Many Trees?
- How Many Trees?
- EOJ 1850 How many trees?
- UVA 10303 How Many Trees?
- UVA 10303 - How Many Trees?(卡特兰数列)
- #9 (Div. 2 Only) D. How many trees? (dp)(好题)
- HDU 1130 How Many Trees?