Red de conocimiento informático - Conocimiento informático - Problemas de stick que requieren estructuras de datos y algoritmos

Problemas de stick que requieren estructuras de datos y algoritmos

Si solo desea generar el tiempo mínimo de ensamblaje, no necesita ninguna estructura de datos.

De hecho, el algoritmo es muy simple: recuerde que f (n) es el tiempo mínimo de ensamblaje requerido para ensamblar n. palos

p>

w[p], l[p] almacena el peso y la longitud del último palo en la secuencia de palos que requieren tiempo de ensamblaje (p=0 a n)

f(1) = 1 (w[0], l[0]), que son los parámetros del primer palo

f(2) = 1 (hay un palo que pesa menos y longitud que el otro palo )(w[0], l[0]), indicando un palo de madera con mayor masa/longitud

f(2) = 2 (no existe) (w[0 ], l[0] ), (w[1], l[1])

f(n) = f(n - 1) (hay i(0<=i<f(n )), de modo que la enésima madera La longitud y la masa de la varilla son mayores o menores que (w[i], l[i])

Si es mayor, entonces (w[i], l[i]) = la suma de las longitudes de la enésima varilla de madera Masa

f(n) = f(n - f(n - 1) + 1 (la situación anterior no existe, en esta vez (w[f(n)], l[f(n)]) = longitud y masa del enésimo palo)

Creo que este algoritmo puede considerarse como un algoritmo recursivo

El código es el siguiente

#include <iostream

usando el espacio de nombres std;

int getAns(int número, int *peso, int *longitud)

{

int respuesta = 1;

int i, j;

int *w = nuevo int [número ], *l = new int [número];

bool add_one_min = true;

w[0] = peso[0], l[0] = longitud [0];

para (i = 1; i < número ; i++)

{

add_one_min = true;

para (j = 0; j < respuesta && add_one_min; j++)

{

if (w[j] > peso[i] && l[j] > largo[i] )

add_one_min = false;

if (w[j] <= peso[i] && l[j] <= peso[j])

{

w[j] = peso[i]

p>

l[j] = peso[j];

add_one _min = falso;

}

}

if(add_one_min)

{

w[respuesta] = peso [i];

l[respuesta] = longitud[i];

respuesta++;

}

}

Eliminar[]w;

Eliminar[]l;

Devuelve la respuesta

}

int main();

{

int número, peso[5000], longitud[5000 ];

int i;

cin >> número;

for (i = 0; i < número; i++)

cin >> peso[i] >> longitud[ i];

cout << getAns(número, peso, longitud);

devuelve 0;

}