關於求兩個數字序列最打子串行長度的一道程式題

2021-08-17 04:15:42 字數 861 閱讀 6948

大家都知道,glory不但知識水平高,並且非常喜歡思考,有一天glory在思考乙個問題,他在紙上寫了兩個1到n的排列,並且他想知道這兩個排列的最大公共子串行的長度是多少,當然像glory這麼優秀的人當然一眼就看出了這個題目的答案,但是他太忙了,不想打這個**,於是他扔給了他的小弟,但是他的小弟知識水平不夠,所以他想找你萌幫幫他,你萌能幫他解決這個問題嗎。

第一行乙個數t,表示資料的測試組數(t<=5)

每組資料乙個n,表示排列的長度(1<= n <= 1e5)

接下來兩行,每行乙個1~n的排列

對於每組資料,輸出乙個數表示最長公共子串行的長度。

2

21 2

1 23

1 3 2

2 3 1

2

1

分析:原本自己寫的時候是建兩個陣列,如何通過多重迴圈來依次尋找子串行,取最大長度。迴圈很複雜,把自己弄暈了也沒解出這道題,看了網上的一篇帖子,用二維陣列來求解,兩個數字序列分別表示橫縱座標,可以比較容易解題。論好思路的重要性!

附上自己寫的**:

#includeusing namespace std;

int main()

for(int j=0;j>b[j];

}int flag[n][n],max=0;

for(int i=0;i=0)&&(j-1>=0)&&(flag[i-1][j-1]>=1))

else flag[i][j]=1;

}else flag[i][j]=0;

if(max}

}cout<}

} return 0;

}

三種演算法求乙個數字序列的最長遞增子串行

也有很多部落格寫如何實現最長遞增子串行的演算法,自己查閱了一些資料總結出三種實現的演算法,兩種是常見的處理思路,還有一種是本人自己想出來的演算法,很好理解,但是效率不是特別高。演算法一 將n個數的原序列a n 排序後得到遞增序列b n 則把求a的最長單調遞增子串行問題轉化成求a b序列的最長公共子串...

求兩個字串的最長公共子串行

autor baker time 25 5 06 求兩個字串的最長公共子串行。x的乙個子串行是相應於x下標序列的乙個子串行,求解兩個序列的所有子串行中長度最大的,例如輸入 pear,peach輸出 pea。分析 次題可用動態規劃演算法解決。首先定義乙個二維陣列 a a i j m g ddgg dd...

求兩個字串的最長公共子串行

方法 一 遞迴 採用遞迴的方法,簡單,但是速度比較慢,當字串比較大的時間,多次遞迴會計算一些重複的過程,因此速度很很慢。include using namespace std int lcslength int i,int j string x,y int lenx,leny int main re...