【发布时间】:2014-12-15 00:12:50
【问题描述】:
我正在研究动态编程,遇到了这个问题,我必须打印出所有最长的子序列。给定一个数组,可能有不止一个最长的子序列。 我尝试的程序只会给我一个最长的子序列,但不会给我所有最长的子序列。如何获得所有最长的子序列?
//Initially I create two arrays of the length of the given input array
public static void LIS(int[] input) {
String paths[] = new String[input.length];
int[] size = new int[input.length];
for(int i=0;i<input.length; i++) {
paths[i] = input[i];
size[i] = 1;
}
for(i=1; i<input.length ; i++) {
for(j=i; j< i ; j++) {
if(input[i] > input[j] && size[i] < size[j] + 1) {
size[i] = size[j] +1;
paths[i] = paths[j] + input[i] + ""
if (maxlength < size[i]) {
maxlength = size[i];
}
}
}
}
}
我的示例输入[] = 1,8,10,3,7,12,15
使用上述算法,我得到最长的子序列为 1,8,10,12,15
我也应该得到 1,3,7,12,15
如何修改代码来获得这个?
【问题讨论】:
-
您的代码无法编译。你能发布正确的吗
标签: java algorithm data-structures dynamic-programming