hdu - 4545
魔法串time limit:1000ms
memory limit:32768kb
64bit io format:%i64d & %i64u
submit
status
description
小明和他的好朋友小西在玩乙個新的遊戲,由小西給出乙個由小寫字母構成的字串,小明給出另乙個比小西更長的字串,也由小寫字母組成,如果能通過魔法轉換使小明的串和小西的變成同乙個,那麼他們兩個人都會很開心。這裡魔法指的是小明的串可以任意刪掉某個字元,或者把某些字元對照字元變化表變化。如:
小西的串是 abba;
小明的串是 addba;
字元變化表 d b (表示d能轉換成b)。
那麼小明可以通過刪掉第乙個d,然後將第二個d轉換成b將串變成abba。
現在請你幫忙判斷:他們能不能通過魔法轉換使兩個人的串變成一樣呢?
input
首先輸入t,表示總共有t組測試資料(t <= 40)。
接下來共t組資料,每組資料第一行輸入小西的字串,第二行輸入小明的字串(資料保證字串長度不超過1000,小明的串的長度大於等於小西的,且所有字元均為小寫字母)。接著輸入字母表,先輸入m,表示有m個字元變換方式(m< = 100),接著m行每行輸入兩個小寫字母,表示前乙個可以變為後乙個(但並不代表後乙個能變成前乙個)。
output
對於每組資料,先輸出case數。
每組資料佔一行,具體輸出格式參見樣例。
sample input
2abba
addba
1d badd
0
sample output
這裡將題目看懂就可以裝換為最長公共子串行
**中用的是個滾動陣列,因為遞推只需要他相鄰一層的資料即可
/*
author: 2486
memory: 1468 kb time: 46 ms
language: g++ result: accepted
*/#include #include #include #include #include using namespace std;
const int maxn = 1000 + 5;
char str1[maxn], str2[maxn], op1[10], op2[10];
int dp[2][maxn];
int t, m;
vectorg[30];
bool judge(char a, char b)
return false;
}bool lca()
}if(max == t1) return true;
return false;
}int main()
printf("case #%d: ", case ++);
}return 0;
}
hdu 4545 西山居一 魔法串
題目 這個題目剛開始沒有做出來 很糾結哦 做錯了 後面參考了一下別人 寫出來的 發現很簡單哦 只是我當時太笨了 呵呵 要注意乙個地方 就是第一次輸入的時候不要while cin n 否則會出錯哦 具體看 include include includeusing namespace std char ...
最長公共子串行 最長公共子串
1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...
最長公共子串行 最長公共子串
1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...