P2036 Perket (estado de compresión)

Perket es un alimento popular. Con el fin de hacer Perket, los cocineros deben ser elegidos cuidadosamente los ingredientes, a fin de lograr un mejor sabor. Tienes N tipos de ingredientes desechables. Para cada ingrediente, sabemos sus respectivos acidez  S S y dulzura  B B. Cuando añadimos los ingredientes, la acidez total del producto de cada acidez total ingrediente; dulzor total es la suma de la dulzura de cada ingrediente.

Como todos sabemos, los alimentos deben ser sabor moderado, por lo que queremos elegir los ingredientes, por lo que la diferencia absoluta entre la acidez y la dulzura mínimo.

Además, hay que añadir al menos un ingrediente, ya que ningún alimento es agua blanca como el ingrediente principal.

Formato de entrada

La primera línea contiene el número entero  N N, representa el número de la eliminación de ingredientes.

Siguiente  N N filas, cada fila es de dos números enteros separados por espacios, cada ingrediente representa la acidez y dulzura.

Los datos de entrada para asegurar que, si añadimos todos los ingredientes, acidez total y la dulzura no excederán de  10 ^ 9 1 0 9

Formato de salida

acidez de salida y la dulzura de la diferencia absoluta más pequeña.

entrada y salida de la muestra

Entrada # 1
1 
3 10

Salida # 1
7
Entrada # 2
4 
1 7 
2 6 
3 8 
4 9
Salida # 2
1

Descripción / Consejos

1 \ N \ le 10 1 N 1 0.

 

 

 

 


En primer lugar la mayoría sujetos a las clases de diez especias, no digitales, por lo que puede utilizar el estado comprimido para enumerar cada caso.
Pero he leído un montón de blog en línea, video en línea. Ellos no son muy buenos, que enfrenta el estado blanco de tutorial de compresión.
Por lo tanto, decidí ~ ~ ~ ~ mañana por la noche pitón Alice hizo una solución a un problema.

Voy a hacer todos los esfuerzos posibles explicaciones detalladas. Por lo tanto, vamos a empezar!


------------

¿Cuál es el estado de compresión?
El estado de compresión, puede comprimir el complejo estado en un número fácil de guardar.
¿No es esta pregunta y aspecto nada tiene que ver?

No se preocupe!

Antes de explicar el estado de compresión, lo que necesitamos saber esta cosa mágica binario, y saber cómo convertir de decimal a binario.

El siguiente se convierte en un código binario decimal (división corta)


------------

`` `cpp
void dectobin (int n)
{
    int resultado = 0, k = 1, i, temp;
    temp = n;
    while (temp)
    {
        i = temp% 2;
        resultar = k * i + resultado;
        k = k * 10;
        temp = temp / 2;
    }
    Printf ( "% d \ n", resu
`` `

 

------------

Un estudiante: Oh, Dios mío! Sé que decimal a binario conversión de lo que es el uso ah? Ah no poco de ayuda para este tema!

0 para falso, 1 de cierto en el mundo de la informática.

No es que podemos utilizar 1 para este condimento es se selecciona, no es 0 para la selección.

¡Precaución! ¡Precaución!

Así que si hay cuatro especias ABCD, dejarme elegir un cocinero ABC tres.

Así, con un representante de la elección, 0 para no seleccionado

No es el caso que se puede reescribir como:

Elección, elección, elección, ninguna elección

1,1,1, 0


A continuación nos fijamos en ah, ah, ah coma parece no afectar a la

a continuación, hemos suprimido la coma no es es 1110 (el cual no es representativo de este estado)

Si nos fijamos en este 1110 el punto de vista binario, no es la única correspondencia ** ** Un número de ella

Es decir, 8 + 4 + 2 = 14 Este número

medio ~ ~ Bueno, felicitaciones, usted ha aprendido del estado comprimido ~

 

------------
Ahora sabemos que todos los estados se pueden utilizar para representar binario si todas las especias utilizadas

Una impresión más profunda y, a continuación algunos ejemplos: ABCD o

Elegí D, ABC no es la elección 0001

ABCD Select es 1111

ABCD no es elegido 0000

Algunos compañeros decían: ah ~ que esta cosa ah, ya sé lo que es el uso en el sistema binario representa el estado? Es la línea de mano y todo el estado? ? ? Golpear la mesa? ? ?

¡NO!

Para este tema para un total de 2 * 2 * 2 * 2 ...... un total de 1024 estados

Un compañero: Número máximo correspondiente al binario de modo se convierte en decimal 1024? ? ?

De hecho, se puede ver en el ejemplo anterior

Si todas las especias para elegir palabras diez:

Es 1111111111 (diez 1)

2 ^ 11 a -1 es tan grande 2047

Seleccione el más grande, menos elegir uno (requisitos de la materia, por lo que no es 0)

Eso 111111111 -> -> -> 0000000001

Por supuesto: 0000000010, también se reúnen sólo podrán optar a una

------------
Para resumir, podemos utilizar 2047 para representar 1111111111, a continuación, vamos a dejar de desde menos 1, el propósito de la enumeración de todos los estados

Además de estos entendemos otra cosa muy importante ** ** - la computación bits

Aquí simplemente decimos que ha habido algunos abajo, y el resto puede ir a Baidu


------------


** y ** y la acción del operador: dos al mismo tiempo es "1", el resultado fue "1", 0 en caso contrario

regla de operación: 0 y 0 = 0; 1 y 0 = 0; 1 y 0 = 0; 1 & 1 = 1;

** operador de desplazamiento a izquierda (<<) **
bits respectivos de todos izquierda operando un número de bits (dígitos binarios descartados fue a la izquierda, el complemento derecha 0).
Ejemplo: A = a << 2 bits a la izquierda de un 2, 0 hasta la derecha,
la izquierda después de 1 a = a * 2; 
si la parte superior izquierda cuando descarte no está incluido 1, cada uno a la izquierda , correspondiente a la número multiplicado por dos.

** Desplazamiento a la derecha del operador (>>) **
cada uno de un número de todos los bits a la derecha un número de bits, un número positivo de 0 a izquierda, arriba dejó un derecho negativo descartado.
Operando cada desplazamiento a la derecha, lo que equivale al número dividido por dos.
Por ejemplo: a = a >> 2 a de la derecha dos bits,
el complemento izquierda depende 0 o 1 se mueve hacia arriba el número es positivo o negativo


------------
Luego encontramos un fallo original por un número binario 1 no es sólo un poco para el operador & a OK ah


CPP `` `
SI (. I y (<< 1 (J -. 1)))
` ``
es el código

operador de desplazamiento a la izquierda:

El binario 1 << 1: 10

El binario 1 << 2: 100

Desde 1110 binaria basada 10 (un número binario ejemplos simplemente levantadas hacen)
derecha a izquierda de la segunda número de bit no es 1


Basado en 100 11001 (supra) binario
tercer bit de derecha a izquierda, no es 1

En tanto que seguimos produciendo un ciclo

1,10,100,1000 ......

Así que usted puede saber que al final es lo que se seleccionan las especias

### enumeración estado + el caso + escanear tratando de aprender C ++ para escribir el código == AC!

Por último, el código de CA es el siguiente:

compañeros cuidadosas me encontrarán un f [2048] Sin embargo, no existe un uso ah ja ja ja

------------

`` `cpp
#include <iostream>
#include <math>
using namespace std;

F int [2048];
struct
{
int S; // acidez
int t; // dulzura
} Shicai [18 es];
principal int ()
{
int N;
CIN >> N;
for (int i = 1;. I <= N; i ++)
CIN >> Shicai [I] .s >> Shicai [I] .T;
int C = 9.999.999; // diferencia dulzura, el primer conjunto al infinito
for (int i = (1 << N) - . 1; I> = 1;. i--)
{
int T_T = 0;
int = S_T 1;. S_T // no se establece a 0
. for (int 1 = J; J <= N; J ++) // iniciar la compresión de estado , barrer la
{
IF - // ahora contraste j-ésimo de condimentos bit (I & (<< 1 (j 1))..)
{
T_T + = Shicai [j] .T;
S_T Shicai * = [J] .s ;
}
}
C = min (C, ABS (T_T - S_T));
}
COUT C << << endl;
return 0;
}
`` `

Supongo que te gusta

Origin www.cnblogs.com/leader-one/p/12624159.html
Recomendado
Clasificación