Code[VS] 1029 遍历问题
来源:互联网 发布:公司域名备案需要多久 编辑:程序博客网 时间:2024/06/03 02:06
【题意】给定前序遍历和后序遍历(a-z且不重复),求中序遍历的方法数
【分析】
设前序遍历为s,后序遍历为t
设DFS(ls,rs,lt,rt)表示前序遍历为s[ls..rs],后序遍历区间为t[lt..rt]的方法数
若ls>=rs则肯定只有1种情况,返回1
由遍历的性质知道根节点=前序遍历的第一个=后序遍历的最后一个即s[ls]=t[rt],若不等于则返回0
【实现】
【分析】
设前序遍历为s,后序遍历为t
设DFS(ls,rs,lt,rt)表示前序遍历为s[ls..rs],后序遍历区间为t[lt..rt]的方法数
若ls>=rs则肯定只有1种情况,返回1
由遍历的性质知道根节点=前序遍历的第一个=后序遍历的最后一个即s[ls]=t[rt],若不等于则返回0
找到wt使得t[wt]=s[ls+1],若wt=lt-1则返回DFS(ls+1,rs,lt,rt-1)<<1,
否则返回DFS(ls+1,ws,lt,wt)*DFS(ws+1,rs,wt+1,rt-1)
【实现】
#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;int len;char s[30],t[30];int DFS(int ls,int rs,int lt,int rt){if (s[ls]^t[rt]) return 0;if (ls>=rs) return 1;for (int ws=ls+1,wt=lt;;ws++,wt++)if (t[wt]==s[ls+1])return wt==rt-1?DFS(ls+1,rs,lt,rt-1)<<1:DFS(ls+1,ws,lt,wt)*DFS(ws+1,rs,wt+1,rt-1);}int main(void){ scanf("%s%s",s,t);len=strlen(s);printf("%d\n",DFS(0,len-1,0,len-1));return 0;}
0 0
- Code[VS] 1029 遍历问题
- CODE[VS] 1029 遍历问题
- CODE[VS]1029 遍历问题
- code vs 1029 遍历问题 区间dp
- Code vs 2010 求后序遍历
- Code[vs]1014 装箱问题
- code vs装箱问题2
- CODE[VS] 1014 装箱问题
- VS Code python配置问题
- CODE[VS]1014 装箱问题
- CODE[VS]_3143二叉树的序遍历
- code[vs] 3143 二叉树的序遍历
- CODE[VS]_3038 3n+1问题
- CODE[VS]_1098 均分纸牌问题
- CODE[VS]_1214 线段覆盖问题
- Code[VS] 3377 接水问题2
- Code[VS] 1295 Nqueens N皇后问题
- CODE[VS] 1016 税收与补贴问题
- UVa 11258 String Partition(DP)
- log4j使用
- BZOJ2761 不重复数字
- 简单方便的大众型视频编辑器“编辑星”正式免费开放
- Android软件开发之获取通讯录联系人信息(二十九)
- Code[VS] 1029 遍历问题
- 简单方便的大众型视频编辑器“编辑星”正式免费开放
- UVa 10608 - Friends(并查集)
- 关于那些将要毕业的事
- ACM--steps--3.3.5--Robberies(01背包)
- hdu 1301 Jungle Roads 一个很水的题 AC率也可以知道了 但是题目很难理解啊 英语渣o(╯□╰)oKruskal算法
- 可伸缩多线程任务队列
- 《人是为了别人而活着》——爱因斯坦
- 简单方便的大众型视频编辑器“编辑星”正式免费开放