【基础算法】M叉树的遍历问题(BZOJ1185)
来源:互联网 发布:下载淘宝网到电脑桌面 编辑:程序博客网 时间:2024/04/30 13:54
问题 H(1185): 【基础算法】M叉树的遍历问题
时间限制: 1 Sec 内存限制: 64 MB提交: 34 解决: 20
[提交][状态][我的提交]
题目描述
已知一棵m叉树的先序遍历s1和后序遍历s2,s1和s2均为由小写字母组成的字符串。求可能的中序遍历的总数,结果不超过长整型。
输入
输入:三行:第一行:一个整数m,1 = < m < = 20, 第二行:一个字符串s1,表示该树的先序遍历。第三行:一个字符串s2,表示该数的后序遍历。 s1和s2的长度相等,且均不超过26。
输出
输出:一个整数,表示所有可能的中序遍历的总数。
样例输入
(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)
10abcbca
样例输出
45
分析:把m叉树转成二叉树(二叉树的前序遍历为m叉树的前序遍历,二叉树的中序遍历为m叉树的后序遍历)。建好二叉树后再转回m叉树,然后m叉树上总可能性为该层所有子树的可能性之积再乘上下一层的排列组合(杨辉三角形预处理)
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;const int M=20;int n,m,cnt=1;long long dp[25][25];char pre[30],mid[30];struct node{ int l,r; }tree[1010];struct node2{ int sum,child[1010];}Tree[1010];void build(int l,int r,int now,bool flag){ if(cnt>=n+1) return; for(int i=l;i<=r;i++){ if(mid[i]!=pre[cnt]) continue ; cnt++; if(!tree[now].l&&!flag) tree[now].l=mid[i]; else tree[now].r=mid[i]; build(l,i-1,mid[i],0); build(i+1,r,mid[i],1); }} void count(int r,int x){ if(!x) return ; Tree[r].child[++Tree[r].sum]=x; count(r,tree[x].r);}void Tree_creat(int x){ if(!tree[x].l) return ; count(x,tree[x].l); for(int i=1;i<=Tree[x].sum;i++) Tree_creat(Tree[x].child[i]);}long long dfs(int x){ long long ans=dp[m][Tree[x].sum]; for(int i=1;i<=Tree[x].sum;i++) ans*=dfs(Tree[x].child[i]); return ans;}int main(){ for(int i=0;i<=M;i++) dp[i][i]=dp[i][0]=1ll; for(int i=1;i<=M;i++) for(int j=1;j<i;j++) dp[i][j]=dp[i-1][j]+dp[i-1][j-1]; scanf("%d",&m); scanf("%s%s",pre+1,mid+1); build(1,n=strlen(pre+1),0,0); Tree_creat(pre[1]); printf("%lld",dfs(pre[1]));}
0 0
- 【基础算法】M叉树的遍历问题(BZOJ1185)
- lintcode(M)二叉树的层序遍历II
- 二叉树的层次遍历(f m)
- Lintcode(M) 二叉树的层次遍历
- LintCode:M-二叉树的锯齿形遍历
- 回溯算法----图的M着色问题
- 算法 图的M着色问题
- 二叉树的几个基础遍历算法代码
- m着色问题(回溯算法)
- 树的遍历(基础)
- 树的遍历算法
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 基础算法001---二叉树遍历 Java
- 经典算法问题 之 图的m-着色判定问题
- [算法]图算法之骑士遍历问题(象棋中马的遍历问题)分析,C语言实现
- 二叉树的遍历(物理算法)
- 【经典算法问题】马的遍历【回溯】
- Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)
- Android 多文件上传
- ganglia监控的数据 rrd数据文件
- 程序
- poj 1069 深搜+建坐标系
- 微信小程序---第一天
- 【基础算法】M叉树的遍历问题(BZOJ1185)
- 在Ubuntu 14.10下安装Lua 5.2出错的解决
- 线性表——顺序实现java
- Hadoop那些事儿(二)---MapReduce开发环境搭建
- SpringMVC 无法访问到指定jsp页面可能的原因
- java异常语句中catch,finally的执行顺序
- 树状数组
- MyBatis 底层原理
- c语言学习日志 day3