/*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*******
題目描述
字串行的子串行是指從給定字串行中隨意地(不一定連續)去掉若干個字元(可能乙個也不去掉)後所形成的字串行。令給定的字串行x=「x0,x1,…,xn-1」, 序列y=「y0,y1,…,yk-1是x的子串行,存在x的乙個嚴格遞增下標序列
,使得對所有的j=0,1,…,k- 1,有xij="yj。 例如,x=「abcbdab」,y=「bcdb」是x的乙個子串行。對給定的兩個字串行,求出他們最長的公共子串行長度,以及最長公共子串行個數。i0,i1,…,ik-1>
,使得對所有的j=0,1,…,k->
輸入第1行為第1個字串行,都是大寫字母組成,以」.」結束。長度小於5000。
第2行為第2個字串行,都是大寫字母組成,以」.」結束,長度小於5000。
輸出第1行輸出上述兩個最長公共子串行的長度。
第2行輸出所有可能出現的最長公共子串行個數,答案可能很大,只要將答案對100,000,000求餘即可。
思路這是一道典型的求最長公共子串行的題,但不只是基礎。
首先第一問很容易得到解決;第二問只需要再加乙個陣列進行計數即可。如果需要更新f陣列時,單純得給s陣列賦值即可;若最長長度相等,則只需在之前滿足條件的最大值上加上s陣列即可。最後再利用迴圈計數相加取模即可。
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
****/
#include
#include
#include
#define inf 100000000
using namespace std;
int n,m,maxl,count,s[5002],ans,f[5002];
string a,b;
int main()
else}}
if(maxl
else}}
}ans=0;
count=0;
for(int i=1;i
else}}
cout}/*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*******
problem: 22852
user: hznq60003
language: c++
result: 正確
time:527 ms
memory:1720 kb
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
****/
HAOI2010 最長公共子串行 dp
求兩個字串行的最長公共子串行以及個數,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 ...
最長上公升子串行
問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...
最長上公升子串行
最長上公升子串行問題是各類資訊學競賽中的常見題型,也常常用來做介紹動態規劃演算法的引例,筆者接下來將會對poj上出現過的這類題目做乙個總結,並介紹解決lis問題的兩個常用 演算法 n 2 和 nlogn 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1...