【基础算法】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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3个月宝宝眉毛淡怎么办 1个月宝宝眉毛淡怎么办 我眉毛很淡又少怎么办 脸两侧颧骨太宽怎么办 脸的两边太宽怎么办 脸宽怎么办可以瘦下来 白眼球红了一块怎么办 三国志13坏档了怎么办 权倾三国的战车怎么办 勾线笔笔头干了怎么办 水彩笔没有水了怎么办 水彩笔不出水了怎么办 去眼袋后有皱纹怎么办 一笑眼角有皱纹怎么办 打了玻尿酸淤青怎么办 眉头两边长痘痘怎么办 下巴和额头长痘怎么办 额头上一直长痘怎么办 额头上的闭合性粉刺怎么办 脸上有多长痘痘怎么办 雄性激素过多长痘痘怎么办 额头上反复长痘怎么办 汽车脱审一个月怎么办 山药弄到手上痒怎么办 山药弄到皮肤痒怎么办 喉咙痒咳嗽痰多怎么办 老赖2年后仍不还怎么办 老赖欠款不还怎么办 酒店丢了房卡怎么办 微信上买狗被骗怎么办 洋码头不给退货怎么办 代购被海关查了怎么办 洋码头被投诉了怎么办 安利网上办卡怎么办 美图m6拍照模糊怎么办 买的发箍戴着紧怎么办 带发卡老是滑掉怎么办 发卡戴不住总滑怎么办 皮肤皮肤干燥起皮怎么办 拔毒膏拔出脓后怎么办 拔毒膏拔出毒后怎么办