Subir de nivel - Concurso ICPC Southeastern Europe 2019 (简单 DP)

 

 

 

Tema: Steve juega a World of Warcraft para realizar tareas para actualizar a dos niveles, las tareas le brindan una experiencia diferente en diferentes niveles, ingrese el número de tareas y la experiencia requerida para actualizar al primer nivel y el segundo nivel, luego ingrese el primer nivel de cada tarea Completa la experiencia y el tiempo dedicado, el segundo nivel para completar la experiencia y el tiempo dedicado. El tiempo mínimo requerido para actualizar a dos niveles, si no, entonces salida -1.

Solución:

A partir de los datos del título, puede pensar directamente en el uso de la programación dinámica, porque la experiencia máxima requerida es de solo 500, por lo que puede abrir DP [I] [J] [K] (recuerde abrir tanto tiempo, INF también debe ser reemplazado, estoy por esta tarjeta Durante mucho tiempo), i representa el primer nivel de experiencia, J representa el segundo nivel de experiencia, K representa las primeras tareas. Vea los comentarios del código para más detalles.

 

#define _CRT_SECURE_NO_DepRECATE
 #define _CRT_SECURE_NO_WARNINGS 
# include <cstdio> 
#include <iostream> 
#include <math> 
#include <iomanip> 
#include < string > 
#include <algoritmo> 
#include <bitset> 
#include <cstdlib> 
#include <cctype > 
#include <iterator> 
#include <vector> 
#include <cstring> 
#include <cassert> 
#include <map> 
#include <queue>
#include <conjunto > 
#include <pila> 
#include <stdio.h>
 #define ll largo largo
 #define INF 0x3f3f3f3f
 #define ld largo doble
 const ld pi = Acos (- 1 . 0L ), eps = 1E- 8 ;
int qx [ 4 ] = { 0 , 0 , 1 , - 1 }, qy [ 4 ] = { 1 , - 1 , 0 , 0 }, qxx [ 2 ] = { 1 , - 1 }, qyy [ 2] = { 1 , -1 };
 usando  std de espacio de nombres ;
 nodo de estructura 
{ 
    ll exp1, exp2, time1, time2; // Tiempo para un nivel de experiencia y dos niveles de experiencia Nivel 1 tiempo gastado en dos niveles 
} ren [ 510 ] ; 
ll dp [ 511 ] [ 511 ];
 bool cmp (nodo a, nodo b) 
{ return a.exp1 < b.exp1; 
} int main () 
{ 
    ios :: sync_with_stdio ( false ); 
    cin.tie ( 0 ); 
    cout.tie ( 0 ); 
    ll a, b, c; 
    cin
    
>> a >> b >> c; 
    ll ans = 0 ;
    for (ll i = 0 ; i <= 510 ; i ++ ) 
    { 
        for (ll f = 0 ; f <= 510 ; f ++ ) 
        { 
            dp [i] [f] = numeric_limits <int64_t> :: max (); // 初始化 , 注意 是 longlong!
        } 
    } 
    para (ll i = 0 ; i <a; i ++ ) 
    { 
        cin >> ren [i] .exp1 >> ren [i] .time1 >> ren [i] .exp2> > ren [i] .time2; 
    } 
    sort (ren, ren + a,// Primero clasifique las tareas de acuerdo con el tamaño del primer nivel de experiencia, de lo contrario es fácil obtener el error 
    dp [ 0 ] [ 0 ] = 0 ;
     for (ll i = 0 ; i <a; i ++ ) 
    { 
        for (ll f = b; f> = 0 ; f-- ) 
        { 
            for (ll k = c; k> = 0 ; k-- ) 
            { 
                if (dp [f] [k] == numeric_limits <int64_t> :: max ()) 
                { 
                    continuar ; 
                } 
                if (f <b) // Si no ha 

                    alcanzado el segundo nivel                 { ll exp1= f + ren [i] .exp1, exp2 = k;
                     if (exp1> b) // La experiencia de desbordamiento durante la actualización se mantendrá 
                    { 
                        exp2 = min (c, exp1-b + k); // La experiencia de evitar el desbordamiento Desbordamiento 
                        exp1 = b; 
                    } 
                    dp [exp1] [exp2] = min (dp [exp1] [exp2], dp [f] [k] + ren [i] .time1); // transición de estado 
                } 
                ll exp2 = min ( k + ren [i] .exp2, c); // Evita el desbordamiento 
                dp [f] [exp2] = min (dp [f] [exp2], dp [f] [k] + ren [i] .time2); // Transferencia de estado 
            } 
        }
    }
     if (dp [b] [c] == numeric_limits <int64_t> :: max ()) // juzga si hay una solución 
    { 
        cout << " -1 " ;
         return  0 ; 
    } 
    cout << dp [b] [c] ;
     devuelve  0 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/Load-Star/p/12685829.html
Recomendado
Clasificación