對於求最長遞增子串行和最長公共子串行的問題,最簡單的方法就是動態規劃
給定義一組資料【-1,2,4,3,5,6,7,5】,最長遞增子串行是-1,2,3,5,6,7,結果為6
思路:dp[i]來記錄a[i]為結尾的子串行中最大遞增子串行的長度,對於每乙個i,令j從1到i - 1遍歷,當a[j] < a[i],比較當前d[i]和每乙個d[j] + 1的大小,將最大值賦給d[i]。..
public class test3 ;
system.out.print(increlist(a));//最長遞增子串行長度
}private static int increlist(int a)
int maxcount=0;
int dp=new int[length];
for (int i = 0; i < length; i++) 和的結果是,和,也就是最長公共子串行長度唯一,但子串行不唯一。
public class solution
lcs[0][i] = flag;
} //把第一列寫好
flag = 0;
for (int i = 0; i < s1len; i++)
lcs[i][0] = flag;
} for (int i = 1; i < s1len; i++)
else }}
// displayarr(lcs ,s1len , s2len);
system.out.println(lcs[s1len - 1][s2len - 1]); }
//最長連續公共子串行
public static void findcontinuelcs(string a,string b)
for (int i = 0; i < dp[0].length; i++)
int max = 0;
for (int i = 1; i < dp.length; i++)
else
}else
if (max < dp[i][j])
}} system.out.println(max); }
//列印陣列
public static void displayarr(int arr, int row, int col)
system.out.println();
} }public static void main(string args)
}
參考: 最長公共子串行 最長遞增子串行 最長遞增公共子串行
求最長公共子串行 int dp maxn maxn int a maxn b maxn int main else dp i j max dp i 1 j dp i j 1 printf d n dp m n return 0 輸出最長公共子串行 int dp maxn maxn int d max...
最長公共子串行 最長遞增子串行
最長公共子串行 dp 杭電1159 include using namespace std string str1,str2 int dp 1005 1005 intlcs return dp str1.size str2.size int main 最長遞增子串行 杭電1257 include u...
最長遞增子串行 最長公共子串行 最長公共子串
最長遞增子串行a 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6.輸入描述 第一行包含乙個整數t,代表測試資料組數。對於每組測試資料 n 陣列的長度 a1 a2 an 需要計算的陣列 保證 1 n...