填空题
#include <iostream>
#include <string> 
using namespace std;

int lefts[20], rights[20], father[20]; 
string s1, s2, s3;
int n, ans;

void calc(int x, int dep)
{
	ans = ans + dep*(s1[x] - 'A' + 1);
	if (lefts[x] >= 0) calc(lefts[x], dep+1); 
	if (rights[x] >= 0) calc(rights[x], dep+1);
}
void check(int x)
{
	if (lefts[x] >= 0) check(lefts[x]); 
	s3 = s3 + s1[x];
	if (rights[x] >= 0) check(rights[x]);
}
void dfs(int x, int th)
{
	if (th == n)
	{
		s3 = "";
		check(0);
		if (s3 == s2)
		{
			ans = 0;
			calc(0, 1); 
			cout<<ans<<endl;
		}
		return;
	}
	if (lefts[x] == -1 && rights[x] == -1)
	{
		lefts[x] = th; 
		father[th] = x; 
		dfs(th, th+1); 
		father[th] = -1;
		lefts[x] = -1;
	}
	if (rights[x] == -1)
	{
		rights[x] = th; 
		father[th] = x; 
		dfs(th, th+1); 
		father[th] = -1;
		rights[x] = -1;
	}
	if (father[x] >= 0)
		dfs(father[x], th);
}
int main()
{
	cin>>s1; 
	cin>>s2;
	n = s1.size();
	memset(lefts, -1, sizeof(lefts));
	memset(rights, -1, sizeof(rights));
	memset(father, -1, sizeof(father));
	dfs(0, 1);
}

输入:

ABCDEF 

BCAEDF

输出:              

赣ICP备20007335号-2