題意:
中文題意,略。。。
思路:第一問,求最長公子序列,模板題。。。
第二問,求最長公共子串行的個數,這個就比較有意思了。
設len[i][j]表示表示第乙個串到i位置,第二個串到j位置時的長度。
設lcs[i][j]表示第乙個串到i位置,第二個串到j位置時,lcs的個數。
當a[i] == b[j]:
那麼最長公共子串行肯定是可以從i-1,j-1的位置繼承來的,所以lcs[i][j] += lcs[i-1][j-1];
當len[i][j-1] = len[i][j],說明lcs也可以從i,j-1的位置繼承來,那麼lcs[i][j] += lcs[i][j-1];
當len[i-1][j] = len[i][j],同理。
當a[i] != b[j]時:
要麼從i – 1,j的位置繼承而來,要麼從i,j-1的位置繼承而來。
但是當len[i][j-1] = len[i-1][j]時,說明兩個lcs均是從i-1,j-1的位置繼承而來,那麼以i-1,j-1結尾的lcs的個數就被加了兩次,所以要減去一次。
然後這題限制空間,所以得用滾動陣列優化。
BZOJ2423 最長公共子串行(動態規劃)
bzoj 洛谷今天考試的時候,神仙出題人 fdf 把這道題目作為乙個二合一出了出來,我除了orz還是只會orz。對於如何 o n 2 求解最長的長度是很簡單的。設 f i j 表示第乙個串匹配到了 i 第二個串匹配到了 j 的最大長度。那麼轉移很顯然,要麼 i 向後挪動一位,要麼 j 向後挪動一位,...
2423 HAOI2010 最長公共子串行
題目大意 都是中文自己看吧,題目鏈結 題解 對於第一問,f i j 表示第一串到i第二串到j的最長公共子串,f i j f i 1 j 1 a i b j f i j max f i 1 j f i j 1 a i b j 對於第二問,g i j 表示第一串到i第二串到j的方案數,第一種情況 a i...
最長公共子串行 最長公共子串
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...