Tarea 8 de Diseño de Algoritmos

Trimestre 2012 Primavera
Entrega: 7 de junio de 2012 a las 22:00.

Diseña un algoritmo usando la técnica de programación dinámica para resolver el siguiente problema: Sea N un entero positivo y sean A y B dos arreglos A[1], A[2], ..., A[N] y B[1], B[2], ..., B[N] de enteros positivos. Los índices 1 <= I1 < I2 < ... < IK <= N y 1 <= J1 < J2 < ... < JK <= N forman un subarreglo ascendente común de A y B de longitud K si se cumple que A[I1] = B[J1] < A[I2] = B[J2] < ... < A[IK] = B[JK]. Su algoritmo deberá encontrar un subarreglo ascendente común de A y B con la mayor longitud posible. Por ejemplo, si N = 9, A = [3, 1, 4, 1, 5, 9, 2, 6, 5] y B = [9, 2, 1, 3, 4, 6, 5, 7, 6] entonces los índices I1 = 1, I2 = 3, I3 = 5 e I4 = 8 y J1 = 4, J2 = 5, J3 = 7 e I4 = 9 forman el subarreglo ascendente [3, 4, 5, 6] de longitud 4. Escribe un programa llamado sascomZZ (donde ZZ es la clave de dos dígitos asignada por el profesor) basado en tu algoritmo que acepte como entrada el entero positivo N y dos arreglos A y B de N enteros positivos y que escriba como salida la máxima longitud K de un subarreglo ascendente común de A y B. Puedes suponer que 1 <= N <= 1000 y que A y B son arreglos de int.

Ejemplo de entrada
Ejemplo de salida
9
3 1 4 1 5 9 2 6 5
9 2 1 3 4 6 5 7 6
4

Notas: Tus programas no deben leer ni escribir nada adicional a lo que se indica en el enunciado. El tiempo de ejecución de sus algoritmos será considerado como parte de la evaluación.