参考博客:http://www.cnblogs.com/lonelycatcher/archive/2011/07/28/2119123.html
public class LongestIncreasingSubsequence {
public static int subsequence(int[] arr,int n){ //n为输入数组的长度
if(arr==null||n==0)
return 0;
int[] dp=new int[n];
dp[0]=1;
int maxlen=1;
for(int i=1;i<n;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(arr[j]<arr[i]&& dp[i]<dp[j]+1){ //必须要dp[i]<dp[j]+1这个条件
//它表示当前的子序列的长度要比待更新子序列长度小1的情况下,才更新,不然相等或小于也没意义
dp[i]=dp[j]+1; //不断地更新dp[i]使它最大
maxlen=Math.max(maxlen, dp[i]);
}
}
}
return maxlen;
}
}