Problemas de stick que requieren estructuras de datos y algoritmos
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;
}