【算法设计与分析】最长递增子序列(动态规划)

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

你可能感兴趣的:(算法设计与分析,算法,最长递增子序列,动态规划)