【算法設計與分析】最長遞增子序列(動態規劃)

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);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章