之江学院2017ACM 校赛 Problem M: qwb与二叉树(记忆化搜索)
来源:互联网 发布:吸尘器手持 卧式 知乎 编辑:程序博客网 时间:2024/05/22 17:03
Description
某一天,qwb正在上数据结构课。老师在讲台上面讲着二叉树,qwb在下面发着呆。
突然qwb想到一个问题:对于一棵n个无编号节点,m个叶子的有根二叉树,有多少种形态呐?你能告诉他吗?
Input
多组输入,处理到文件结束,大约有104组数据。
每一组输入一行,两个正整数n,m(0≤m≤n≤50),意义如题目所述。
Output
每一行输出一个数,表示相应询问的答案,由于答案可能很大,请将答案对109+7取模后输出。
Sample Input
4 2
10 5
Sample Output
6
252
思路:dp[i][j]是i个节点j个叶子时树的种类,状态转移方程可以以1个点为根,左右子树方案数的乘积和就是树的种类。
状态转移方程:
dp[n][m]=∑i∑jdp[i][j]∗dp[n−1−i][m−j]
代码:
#include<bits/stdc++.h>using namespace std;const int maxn = 105;typedef long long ll;const int mod = 1e9+7;ll dp[maxn][maxn], n, m;ll dfs(ll x, ll y){ if(dp[x][y] != -1) return dp[x][y]; ll tmp = 0; for(int i = 0; i < x; i++) for(int j = 0; j <= i && j <= y; j++) tmp = (tmp+dfs(i, j)*dfs(x-i-1, y-j))%mod; return dp[x][y] = tmp;}int main(void){ memset(dp, -1, sizeof(dp)); dp[0][0] = 1; dp[1][0] = 0; dp[1][1] = 1; while(~scanf("%lld%lld", &n, &m)) printf("%lld\n", dfs(n, m)); return 0;}
阅读全文
1 0
- 之江学院2017ACM 校赛 Problem M: qwb与二叉树(记忆化搜索)
- 之江学院2017ACM校赛 Problem B: qwb与矩阵(记忆化搜索)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 M: qwb与二叉树 [记忆化dp]【动态规划】
- 之江学院2017ACM 校赛Problem D: qwb与神奇的序列
- 之江学院2017ACM 校赛Problem D: qwb与神奇的序列
- 之江学院2017ACM 校赛 Problem K: qwb与小数(思维 快速幂)
- 之江学院 M qwb与二叉树 卡特兰数+dp
- 之江学院2017ACM 校赛Problem D: qwb与神奇的序列(找规律 快速幂)
- 之江学院2017ACM 校赛Problem G qwb去面试
- 之江学院2017ACM 校赛 Problem J: qwb又偷懒了(树状数组)
- 之江学院2017ACM 校赛Problem G: qwb去面试
- ZJCOJ qwb与二叉树 dp or 记忆化搜索
- 江学院-Problem K: qwb与小数
- 之江学院第0届校赛 Problem H: qwb与学姐(最大生成树+树链剖分)
- 之江学院第0届校赛 Problem I: qwb VS 去污棒(可持久化01字典树)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席(折半搜索+类二分枚举)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem A: qwb与支教(容斥+二分)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem D: qwb与神奇的序列(数论+快速幂)
- java基础教程:基础语法之变量常量(3)
- Maven中手动添加jar包
- 和她正式认识之前,我见过她三次
- 【LeetCode】122.Best Time to Buy and Sell Stock II解题报告
- 使用FPDF输出中文
- 之江学院2017ACM 校赛 Problem M: qwb与二叉树(记忆化搜索)
- 【数据压缩】Exp05.JPEG解码
- jdbc基础
- 文章标题 CSU 1849: Comparing answers(矩阵降维+随机化思想)
- android DroidPlugin 学习
- centos7安装telnet服务
- java锁机制
- kafka9使用demo
- SQLite