求兩個字串行的最長公共子串行以及個數,\(n\leq 5000\)
第一問,考慮 \(f[i][j]\) 表示兩個串分別跑到了 \(i,j\) 位置的最長公共子串行,則
\[f[i][j]=\max(f[i-1][j],f[i][j-1],f[i-1][j-1]+[s[i]==t[j]])
\]暴力轉移即可
第二問,考慮 \(g[i][j]\) 表示兩個串分別跑到了 \(i,j\) 位置的最長公共子串行的方案數,則先正常統計從 \(f[i-1][j],f[i][j-1]\) 過來的方案數,然後考慮兩種特殊情況
#include using namespace std;
const int mod = 100000000;
int n,m,f[2][5005],g[2][5005];
char s[5005],t[5005];
signed main()
}cout<}
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...
P2516 HAOI2010 最長公共子串行
題目鏈結 匹配dp。最長公共子串行比較好求 if a i b j f i j max f i j f i 1 j 1 1 else f i j max f i j max f i 1 j f i j 1 那最長公共子串行的個數怎麼求呢?我們用 g i j 表示a串匹配到 i b串匹配到 j 的最長上...
HAOI2010 最長上公升子串行長度
題目描述 字串行的子串行是指從給定字串行中隨意地 不一定連續 去掉若干個字元 可能乙個也不去掉 後所形成的字串行。令給定的字串行x x0,x1,xn 1 序列y y0,y1,yk 1是x的子串行,存在x的乙個嚴格遞增下標序列 使得對所有的j 0,1,k 1,有xij yj。例如,x abcbdab ...