Programación dinámica del programa C del problema de interceptación de misiles
Escribí uno para ti, pero la secuencia resultante puede no ser única, ¡pero te garantizamos que será correcta! La complejidad del tiempo es O(n^2). No puedo hacer el n*logn que mencionaste en este momento. ¡Te lo diré después de hacerlo!
#includelt;iostreamgt;
usando el espacio de nombres std;
int main()
{
int i, j, n, x[100], d[100]; //x[] representa la altura de cada misil, d[i] se registra como el i-ésimo misil después de ser interceptado.
//Este El número máximo de misiles que el sistema puede interceptar (incluido el i-ésimo misil interceptado).
int dmax=0, xh=0; //Registra el número máximo de intercepciones y el primer número de secuencia interceptado
cingt; //Ingresa el número de intercepciones; Número de misiles
for(i=0;ilt;n;i)
{
cingt;gt;x[i] //Ingresa cada uno Altura del misil
d[i]=1; //Los valores iniciales se establecen en 1
}
for(i=n-2; igt ; =0; i--) //Algoritmo de programación dinámica, implementación recursiva, bucle de atrás hacia adelante
{
for(j=i 1;jlt;n;j)
if((x[j]lt; x[i])amp; amp; (d[i]lt; d[j] 1)) //Condición de juicio
{
d[i]=d[j] 1;
}
}
for(i=0; ilt; n ;i) //Encontrar el número máximo
{
if(d[i]gt;dmax)
{
dmax=d[i];
xh=i; //El número de serie del primer misil interceptado
}
}
coutlt;lt;d[xh]lt;lt;endl;
coutlt;lt;x[xh]lt;lt;",";
for(j=xh 1;jlt;n;j) // Genera los números de serie descendentes que cumplen las condiciones en secuencia
if((x[j]lt;=x[xh])amp;amp;(d[ xh]== d[j] 1)) //Condición de juicio
{
coutlt;lt;x[j]lt;lt;",";
xh =j;
}
devuelve 0;
}