经典指数          
原因
1571
浏览数
0
收藏数
 

#include #include 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 输出:___1_______

     举报   纠错  
 
切换
暂时还没有答案,欢迎分享你的解答 . . .
撰写答案
扫描后移动端查看本题