动态规划之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;
}
}
}
结果如下 :
在一个子串中任意取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;
}
}
}
结果如下 :
相关文章推荐
- 动态规划专题小结:最长上升子序列(LIS)问题
- 动态规划(背包问题,最长递增子序列,硬币问题)java实现
- 动态规划--最长上升子序列问题(LIS) O(n^2) ,O(nlogn)
- java 实现后缀数组及最长回文子串问题
- 最长上升子序列(LIS)问题
- 关于最长上升子序列的问题(LIS)
- 动态规划求解矩阵连乘问题Java实现
- LIS 模板 (最长上升/下降子序列) STL实现
- 动态规划-最长公共子串问题-java版
- LIS 最长递增子序列 Java实现
- 动态规划解决矩阵链乘问题的java编码实现
- 动态规划-最长上升子序列【LIS】
- Java动态规划求解最长公共子串问题
- POJ - 3903 Stock Exchange(LIS最长上升子序列问题)
- 最长上升子序列(LIS)问题
- 最长上升子序列问题(动态规划)
- 算法java实现--动态规划--0-1背包问题
- 最长上升子列 LIS 学习小记 Poj 2533 +CF 261D
- [ACM_动态规划] 最长上升子序列(LIS)
- LIS 最长上升子序列问题 nlgn时间打印其中一个序列