P2516 HAOI2010 最長公共子串行

2022-05-07 17:42:11 字數 713 閱讀 4689

​ 題目鏈結

​ 匹配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\)的最長上公升子串行的個數。

if(a[i] == b[j]) 

else

記得用滾動陣列。

完整**:

#include using namespace std;

inline long long read()

const int n = 100005, mod = 100000000;

char cha[n], chb[n];

int lena, lenb, f[2][n], g[2][n];

int main()

else

}printf("%d\n%d", f[lena & 1][lenb], (g[lena & 1][lenb] + mod) % mod);

return 0;

}

洛谷P2516 HAOI2010 最長公共子串行

字串行的子串行是指從給定字串行中隨意地 不一定連續 去掉若干個字元 可能乙個也不去掉 後所形成的字串行。令給定的字串行x x0,x1,xm 1 序列y y0,y1,yk 1 是x的子串行,存在x的乙個嚴格遞增下標序列,使得對所有的j 0,1,k 1,有xij yj。例如,x abcbdab y bc...

P2515 HAOI2010 軟體安裝

傻了。思路 scc 縮點,樹上揹包。提交 2次 無語。建邊建錯了 思路 關係可能會形成環,而整個環是乙個整體 要選就選環上所有點,否則整個不選 所以我們先把所有的環縮點,然後便形成了一棵樹 乙個點不可能有兩個父親 然後跑樹上揹包。include include using namespace std...

P2515 HAOI2010 軟體安裝

現在我們的手頭有n個軟體,對於乙個軟體i,它要占用wi的磁碟空間,它的價值為vi。我們希望從中選擇一些軟體安裝到一台磁碟容量為m計算機上,使得這些軟體的價值盡可能大 即vi的和最大 但是現在有個問題 軟體之間存在依賴關係,即軟體i只有在安裝了軟體j 包括軟體j的直接或間接依賴 的情況下才能正確工作 ...