您的位置:首页 > 编程语言 > Java开发

动态规划之LIS最长上升子列问题 java实现

2018-03-26 18:45 260 查看
题目如下 :
      在一个子串中任意取N项,要求这N项是递增的,求出这个串中这样的N的最大值,注意这样的最长子列不一定是唯一的,例如在 2 1 5 3 6 4 6 3 中就有1 3 4 6 和2 3 4 6两种,都是4。
   本题可以这么考虑,可以从头开始往后求,设置一个一维数dp组来保存以每一项为结尾的最长子列数目,第一项的肯定是1,后面的第i项只要往前扫描,假如第j项值比我第i项的值小或者等于第i项,那么以第i项为结尾的最长子列数目就是max(dp[i],dp[j]+1),一直这么求直到最后一项n,那么整个串中最长上升子列数目就是dp
了,
所以代码如下:
    import java.util.*;
public class LIStest {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] datas = new int
;
int[] max = new int
;
int result = 0;
for(int i=0;i<n;i++){
datas[i] = sc.nextInt();
max[i] = 1;
}
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(datas[j]<=datas[i]){
max[i] = max(max[i],max[j]+1);
}
}
result = max(result,max[i]);
}
System.out.print(result);
}
public static int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
}
结果如下 :
    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: