题目链接在此
http://bailian.openjudge.cn/p...
从网上找到了解释:
思路:刚开始想的是构造一个二叉树,后来想想并不需要,了解树转二叉树的原理,便可以发现转换后某点的深度为父节点的深度加上它是父节点的第几个子节点,所以直接从根节点按以上规律搜索一遍即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <functional>
#include <cctype>
#include <cmath>
using namespace std;
const int N = 100100;
char s[N];
int res1, res2;
void dfs(int &i, int dep1, int dep2)
{
res1 = max(res1, dep1);
res2 = max(res2, dep2);
int cnt = 1;
while(true && s[i])
{
if(s[i] == 'd')
dfs(++i, dep1 + 1, dep2 + cnt), cnt++;
else
{
i++;
return;
}
}
}
int main()
{
while(~ scanf(" %s", s))
{
int i = 0;
res1 = res2 = -1;
dfs(i, 0, 0);
printf("%d => %d\n", res1, res2);
}
return 0;
}
但是并没有看懂,(;′⌒`),希望高手能详细解释解释,不胜感激!!
这个其实不难,我修改了下代码,写了点注释,你可以看看。
加了点输出语句,显示下搜索计算的过程
修改的代码如下