проблемы с наибольшей общей возрастающей подпоследовательностью
от Егор Козлов - Суббота 4 Ноябрь 2017, 19:51
112024. Наибольшая возрастающая общая подпоследовательность
  Здравствуйте, у меня проблема с задачей под номером D. При отправке решения, оно ни проходит не один тест "Ошибка во время выполнения программы", но сколько я не пытался найти ошибку во время выполнения, столько я её не находил, всё работало без сбоев, я не могу понять почему. Помогите пожалуйста.
С большим уважением Козлов Егор.

Вот мой код:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public abstract class MainD {


private static Matrix dynamic;

private static int[][] a = new int[2][];

private static Scanner scan;

public static void main(String[] args) throws FileNotFoundException
{
scan = new Scanner(new File("input.txt"));

Read(0);
Read(1);

scan.close();

InstanceDynamic();

System.out.println(GenerateDynamic());
}

public static void Read(int arrayIndex)
{


int length = scan.nextInt()+1;

a[arrayIndex] = new int[length];

for(int x = 1; x < length; x++)
{
a[arrayIndex][x] = scan.nextInt();
}
}

public static void InstanceDynamic()
{
dynamic = new Matrix(a[0].length, a[1].length);
}

public static int GenerateDynamic()
{
for(int x = 1; x < dynamic.width; x++)
{
for(int y = 1; y < dynamic.height; y++)
{
int val = CalculateValue(x, y);
dynamic.Set(x, y, val);
}
}

return dynamic.Get(dynamic.width-1, dynamic.height-1);
}

private static int CalculateValue(int x, int y)
{
int val;

if(a[0][x] == a[1][y])
{

if(a[0][x-1] < a[0][x] || a[1][y-1] < a[0][x])
{
val = dynamic.Get(x-1, y-1) + 1;

return val;
}
}

int val1 = dynamic.Get(x, y-1);
int val2 = dynamic.Get(x-1, y);

val = Math.max(val1, val2);

return val;

}


public static class Matrix
{
private int[] value;

public final int width, height;

public Matrix(int w, int h)
{
width = w;
height = h;

value = new int[w*h];
}

public int Get(int x, int y)
{
return value[y*width + x];
}

public void Set(int x, int y, int val)
{
value[y*width + x] = val;
}


@Override
public String toString()
{
StringBuilder sb = new StringBuilder();

for(int y = 0; y < height; y ++)
{
for(int x = 0; x < width; x++)
{
sb.append(Get(x, y));
sb.append(' ');
}

sb.append('\n');
}

return sb.toString();
}
}

}