最長公共子序列&迴文字串 nyoj動態規劃
最長公共子序列
時間限制:3000 ms | 記憶體限制:65535 KB
難度:3
描述
我們們就不拐彎抹角了,如題,需要你做的就是寫一個程式,得出最長公共子序列。
tip:最長公共子序列也稱作最長公共子串(不要求連續),英文縮寫為LCS(Longest Common Subsequence)。其定義是,一個序列 S ,如果分別是兩個或多個已知序列的子序列,且是所有符合此條件序列中最長的,則 S 稱為已知序列的最長公共子序列。
輸入
第一行給出一個整數N(0<N<100)表示待測資料組數
接下來每組資料兩行,分別為待測的兩組字串。每個字串長度不大於1000.
輸出
每組測試資料輸出一個整數,表示最長公共子序列長度。每組結果佔一行。
樣例輸入
2
asdf
adfsd
123abc
abc123abc
樣例輸出
3
6
迴文字串
時間限制:3000 ms | 記憶體限制:65535 KB
難度:4
- 描述
- 所謂迴文字串,就是一個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷一個字串是不是迴文字串。現在要求你,給你一個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為迴文字串。
- 輸入
- 第一行給出整數N(0<N<100) 接下來的N行,每行一個字串,每個字串長度不超過1000.
- 輸出
- 每行輸出所需新增的最少字元數
- 樣例輸入
1 Ab3bd
- 樣例輸出
-
2
題目差不多,其實都是找最長公共子串,迴文字串只要用總長度-最長公共子串長度就可以,動態規劃中的經典題目#include<iostream> #include<string> #include<cstdio> #include<cmath> #include<cstring> using namespace std; char x[1004],y[1004]; int dp[1004][1004]; int main() { int ca; scanf("%d",&ca); while(ca--) { scanf("%s",x); scanf("%s",y); int len1=strlen(x);int len2=strlen(y); for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { if(x[i]==y[j])dp[i+1][j+1]=dp[i][j]+1; else dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]); } } printf("%d\n",dp[len1][len2]); } return 0; }
#include<iostream> #include<cstdio> #include<cstring> #include<cstring> #include<algorithm> using namespace std; int dp[1006][1006]; char s[1006]; char d[1006]; int main() { int ca; scanf("%d",&ca); getchar(); while(ca--) { gets(s); int len1=strlen(s); int x=0; for(int i=len1-1;i>=0;i--) { d[x++]=s[i]; } for(int i=0;i<len1;i++) { for(int j=0;j<len1;j++) { if(d[j]==s[i])dp[i+1][j+1]=dp[i][j]+1; else dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]); } } printf("%d\n",len1-dp[len1][len1]); } return 0; }
相關文章
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 動態規劃(最長公共子序列LCS)動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 動態規劃經典問題----最長公共子序列動態規劃
- 動態規劃之最長公共子序列求解動態規劃
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- [演算法筆記]動態規劃之最長公共子串和最長公共子序列演算法筆記動態規劃
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- 動態規劃-最長上升子序列模型動態規劃模型
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 動態規劃7:最長上升子序列LIS動態規劃
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- “最長公共字串子序列”問題的動態規劃法演算法字串動態規劃演算法
- [動態規劃] 六、最長迴文子串動態規劃
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- 動態規劃求解最長上升子序列問題動態規劃
- 動態規劃求最長降序序列動態規劃
- 最長公共子序列
- 動態規劃解最長迴文子序列並優化空間複雜度動態規劃優化複雜度
- 最長公共子序列(JAVA)Java
- 最長公共子序列,遞迴簡單程式碼遞迴
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- hud1151 動態規劃 最大的公共子序列動態規劃
- java 實現 最長公共子序列Java
- 最長公共子序列求方案數
- 線性dp:最長公共子序列
- 北京大學郭煒-最長上升子序列 動態規劃講解動態規劃
- 演算法題:最長公共子序列演算法
- LCS 演算法:Javascript 最長公共子序列演算法JavaScript
- 最長公共子序列的程式碼實現
- L2-008 最長對稱子串【最長迴文字串】字串
- 雙序列動態規劃動態規劃
- LeetCode 300. 最長上升子序列(Python、動態規劃、貪心演算法)LeetCodePython動態規劃演算法
- LeetCode 1626. 無矛盾的最佳球隊---【動態規劃】最長上升子序列變換版-->最大上升子序列和LeetCode動態規劃
- LeetCode 1143.最長公共子序列LeetCode