[p1616] Luogu hierbas y la escuela mochila completamente loco (re) notas de aprendizaje

portal

hierbas locas

tema de fondo

Esta edición, titulada Loco NOIP2005 tercera pregunta de la popularidad del grupo. Este LiYuxiang conmemorativa titulada nacido.

título Descripción

LiYuxiang era un niño dotado, su sueño es llegar a ser médico más grande del mundo. Con este fin, quería adorar en las proximidades del médico de mayor prestigio como maestro. Médico con el fin de determinar sus calificaciones, le dio un problema. Los médicos lo llevó a una cueva en todas partes hierbas le dijeron:

"Mi hijo, esta cueva tiene algunos diferentes tipos de hierbas, cada una de las cuales la minería va a llevar algún tiempo, cada uno de los cuales tiene su propio valor. Yo te daré algún tiempo, durante este tiempo, se puede recoger algunas hierbas Si eres un chico inteligente, usted debe ser capaz de hacer que el valor total de las hierbas tomadas al máximo ".

Si usted es LiYuxiang, puede realizar esta tarea?

Este problema es diferente y título original:

  1. Cada loco recolección de hierbas ilimitada.
  2. El tipo de drogas deslumbrante, hierbas para un buen tiempo, ¡ah! También lo son el crisantemo maestro agradecido!

Formatos de entrada y de salida

Formato de entrada

De entrada de la primera línea tiene dos enteros T (1 <= T <= 100.000) y M (1 <= M <= 10 000), separados por un espacio, y T representa un tiempo total se puede utilizar hierbas, M para cueva el número de años de medicina a base de hierbas. líneas Siguiente M que comprenden cada uno dos números enteros entre 1 y 10000 (incluyendo 1 y 10000) representan, respectivamente, el valor de un cierto tiempo de Recogida de hierbas y la hierba.

Formato de salida

línea de salida, que contiene un solo número entero que representa dentro del período de tiempo prescrito, se puede adoptar a un valor máximo total de hierbas.

entrada y salida de la muestra

Entrada # 1

70 3
71 100
69 1
1 2

Salida # 1

140

Descripción / Consejos

Los datos para 30%, M <= 1000;

Para todos los datos, M <= 10.000, y M * T <10000000 (no contados, 0 7).

Ven LiYuxiang, la primera AC de salir!

análisis

Este problema es una mochila completamente desnuda.
Y la 01diferencia mochila es una cosa que puede acceder por completo mochila ilimitado. Así que supongo que he reunido \ (n \) sobre las hierbas, entonces la ecuación de transición de estados en este caso debería ser dp[i][j] = dp[i - 1][j - n * v[i]] + n * w[i].
Si tomamos toda la ecuación de transición de estados, establece un \ (\ max \) en la que:
dp[i][j] = max(dp[i][j],dp[i - 1][j - n * v[i]] + n * w[i]).
Pero si es así, la complejidad del tiempo es \ (O (MT ^ T) \) , el alcance de este problema es que los datos \ (M \ Le 10000 \) , \ (T \ Le 100000 \) , por lo que puede utilizar este método T volar.

¿Cómo hacer eso?

En pocas palabras 01la mochila que circula dentro de jla orden inverso se puede cambiar. Si usted no sabe 01unidimensional mochila optimización es la razón por orden inverso, ver escribí esta solución problema .

Entonces, ¿cómo puede esto con 01algo que ver con ella mochila? Primero 01mochila dependiente sub-resultado dp[i - 1][j - v[i]], porque 01se selecciona la mochila y no seleccionado sólo dos tipos, lo que la ecuación de transición de estado seleccionado de la corriente no contiene ielementos. En otras palabras, se redujo a una sola dimensión tiempo para asegurar dp[j - v[i]]el recorrido inverso, con el fin de garantizar el recorrido dp[j]de tiempo dp[j - v[i]]o en el suelo del estado (estado no actualizado).

Pero no es exactamente lo mismo que una mochila, elegir la cantidad de elegir la cantidad de amor, por lo que considerar la adición de una segunda opción de itipo de estrategia de productos, es necesario considerar dp[i][j - v[i]]esta sub-resultados. En otras palabras, la versión de dos dimensiones de la mochila llena, la ecuación de transición de estado para dp[i - 1][j - v[i]]convertirse en el dp[i][j - v[i]]. El encogido a unidimensional, atravesada dp[j]cuando sea necesario para dp[j - v[i]]ser actualizado. Esto requiere amigos positivos secuencia de salto de ~

Esto es un cambio positivo en el orden inverso. Magia, ¿verdad? Este es el dpencanto.

código

/*
 * @Author: crab-in-the-northeast 
 * @Date: 2020-03-12 20:54:13 
 * @Last Modified by: crab-in-the-northeast
 * @Last Modified time: 2020-03-13 01:28:22
 */
#include <iostream>
#include <cstdio>

const int maxm = 10005;
const int maxt = 100005;

inline int max(int a,int b) {
    return a > b ? a : b;
}

int v[maxm],w[maxm],dp[maxt];

int main() {
    int T,M;
    std :: cin >> T >> M;
    for(int i = 1; i <= M; i++) 
        std :: cin >> v[i] >> w[i];
    
    for(int i = 1; i <= M; i++)
        for(int j = v[i]; j <= T; j++)
            dp[j] = max(dp[j],dp[j - v[i]] + w[i]);
        
    std :: cout << dp[T] << std :: endl;
    return 0;
}

resultados de la evaluación

RE 44: R31673389 (razón: Gama de tamaño de la matriz de datos incorrecto ...... ...... confundido)
AC 100: R31673423 (Este código de aire acondicionado, pero a pesar de un pequeño problema en los términos de tamaño de matriz)
AC 100: R31680243

Supongo que te gusta

Origin www.cnblogs.com/crab-in-the-northeast/p/luogu-p1616.html
Recomendado
Clasificación