LEETCODE || preguntas cara 17.16. El masajista

La pregunta de la cara 17,16 masajista
Título:
un terapeuta de masaje conocido recibirá un flujo constante de la solicitud de reserva, la reserva puede ser seleccionado para cada conexión o no está conectado. Entre cada servicio de reservas tienen tiempo para descansar, por lo que no podía aceptar la vecina cita. Dada una secuencia de petición de reserva, la reserva para el terapeuta de masaje para encontrar el conjunto óptimo (el más largo total de la reserva), y devuelve el número total de minutos.

Ejemplo 1:

Entrada: [1,2,3,1]
de salida: 4
Explicación: la selección de un número de reserva y número de reserva 3, longitud total = 3 + 1 = 4.

Ejemplo 2:

Entrada: [2,7,9,3,1]
de salida: 12
Explicación: la selección de un número de reserva, Nº 3 y Nº 5 de reserva reserva, longitud total = 2 + 9 + 1 = 12.

Ejemplo 3:

Entrada: [2,1,4,5,3,1,1,3]
de salida: 12
Explicación: reserva de número 1 selección, reserva No. 3, No. 5 y No. 8 de reserva reserva, longitud total = 2 + 3 + 4 + 3 = 12.

Este problema se puede resolver problemas utilizando la idea de la programación dinámica.

En primer lugar, usamos el 1 y 0 si esto tomó reserva, tomamos 1 representa la reserva actual, a continuación, 0 indica que no hay reserva actual; con DP [i] [0] indica el i-ésimo de acceso no está reservado, DP [i] [ 1] indica el i-ésimo reserva de acceso.

Asunto nos obliga a encontrar el conjunto óptimo de las citas, se supone que la corriente es el i-ésimo cita, la longitud máxima actual de la reserva se puede considerar desde dos aspectos, primero tomé una cita o no se toman el i-ésimo reserva, se hizo cargo cuando el i-ésimo cuando una longitud de reserva, como objeto de la solicitud no puede aceptar la reserva adyacente, por lo que la primera i-1 º reserva debe no contacto, entonces el i-ésimo reserva tomó un dp total de la reserva [i] [1] = dp [i -1] [0] + cuando num [i], entonces el i-ésimo reserva sin máximo dp valor total de la reserva [i] [1] = max (dp [i-1] [0], dp [i- 1] [1]).

Podemos ver, cada hecho, cuando se utiliza i-1 de la longitud total de la reserva se calcula cuando la reserva es el i-ésimo tiempo, así que podemos usar las dos variables DP1 y dp0 para registrar cada suma reserva, y luego se calcula la longitud reserva la próxima vez . Código es el siguiente:

class Solution {
public:
    int massage(vector<int>& nums) {
        if (nums.size() == 0)
            return 0;
        int dp0 = 0, dp1 = nums[0];
        for (int i = 1; i < nums.size(); ++i){
            int tdp0 = max(dp0, dp1);
            int tdp1 = dp0 + nums[i];
            dp0 = tdp0;
            dp1 = tdp1;
        }
        return max(dp0, dp1);
    }
};
Publicó un artículo original · ganado elogios 0 · Vistas 46

Supongo que te gusta

Origin blog.csdn.net/qq_41809369/article/details/105082752
Recomendado
Clasificación