題目鏈結
匹配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的直接或間接依賴 的情況下才能正確工作 ...