【State Compression DP】 SCOI2009 Weidoudou

Asunto

Enlace Luogu Hay \ (D \) beans
en una matriz de matriz \ (N × M \) , y cada bean tiene una puntuación diferente \ (V_i \) . El jugador puede elegir cualquier casilla como la cuadrícula inicial, y puede moverse a las cuatro cuadrículas adyacentes al azar cada vez que se mueve, y finalmente regresar a la cuadrícula inicial. El puntaje final del jugador es la suma de los puntajes de todos los Doudou rodeados por el camino menos el número de pasos que el jugador mueve. Hay obstáculos en algunas cuadrículas en la matriz, y los jugadores no pueden ingresar a las cuadrículas que contienen obstáculos o frijoles en ningún momento. El puntaje más bajo posible para un jugador es 0, lo que significa que no se hace nada. (El ejemplo se puede ver abriendo el enlace, que es más importante)

Formato de entrada

Los dos enteros \ (N \) y \ (M \) en la primera fila son las longitudes laterales de la matriz.
Un número entero \ (D \) en la segunda línea es el número total de beans.
La tercera línea contiene \ (D \) enteros \ (V_1 \) a \ (V_D \) , que son las puntuaciones de cada bean.
Luego hay una matriz de caracteres \ (N × M \) en la línea N para describir el estado de la matriz del juego, 0 significa espacio, # significa obstáculo Los números del 1 al 9 indican respectivamente el número correspondiente de frijoles.

Formato de salida

Contiene solo un número entero, la puntuación más alta posible.

Entrada de muestra

3 8
3 30-100
30
00000000
010203 # 0
00000000

Salida de muestra

38

Rango de datos

El 50% de los datos satisface \ (1≤D≤3 \) .
El 100% de los datos satisface \ (1≤D≤9 \) , \ (1≤N \) , \ (M≤10 \) , \ (-10000≤V_i≤10000 \) .

Ideas

Método básico

Aprenda ahora Venda el método para
juzgar si un punto está dentro de un polígono: dibuje un rayo desde el punto objetivo y vea el número de intersecciones de este rayo con todos los lados del polígono. Si hay un número impar de intersecciones, significa adentro, si hay un número par de intersecciones, significa afuera.

Respuesta correcta

En primer lugar, veo que \ (D \) es muy pequeño, en el rango de 10, por lo que debe presionarse con DP.
Punto de partida de enumeración de violencia directa. El estado no solo debe registrar la posición actual, sino también la paridad de cada rayo derecho de Doudian.
La paridad del rayo derecho de cada bean es una cadena de \ (D \) bits 01, que puede considerarse como un número binario de \ (D \) bits para una grabación conveniente (el conjunto de bits está disponible, por supuesto, mi Konjac es inútil).
Entonces \ (f [i] [j] [k] \) representa la coordenada \ ((i, j) \) , y la paridad del rayo derecho Doudian t-th es \ (k >> t \ & 1 \) .
Luego puede escribir un DP + SPFA para resolver el problema y enumerar el punto de partida y el estado.
Recuerde preprocesar las coordenadas.

Supongo que te gusta

Origin www.cnblogs.com/Midoria7/p/12702928.html
Recomendado
Clasificación