public class LongSeries {
public static int Long(int []num){
int []dp = new int[num.length];
for(int i = 0;i < dp.length;i++){
dp[i] = 1; //dp[i]代表以num[i]這個數字結尾的最長遞增子序列,dp[i]至少爲1
}
for(int i = 0;i < num.length;i++){
for(int j = 0;j < i;j++){
//找到前一個比它小的值的序號,序列就+1
if(num[j] < num[i]){
dp[i] = Math.max(dp[i],dp[j] + 1); //狀態方程。劃分子問題
}
}
}
int x = 0;
int max = 0;
//找到dp[i]中的最大值
for(int i = 0;i < dp.length;i++){
max = Math.max(x, dp[i]);
}
return max;
}
public static void main(String[] args) {
int []num = {1,4,3,4,2,3,5};
int max = Long(num);
System.out.println(max);
}
}
【算法設計與分析】最長遞增子序列(動態規劃)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.