1. Portal: Ganado de pasajeros 13594- elegir la dislexia
El significado de los problemas: se k artículos son, para cada tipo de artículo tiene una [i] ap cada elemento tiene un valor, elegir un máximo de cada categoría de artículos, cuántos ley electoral requiere que el valor total> m (no se requiere para cada tipo de artículo debe ser seleccionado)
Solución: Es claro que un DFS el problema, pero a la poda de optimización, asumiendo nuestra vaule total actual todos los artículos> m, entonces solo cuente el número total de combinaciones después de que los elementos de la lista ( prestar especial atención a cada categoría de artículos no pueden votar, es decir num [0] = 0, el número dfs 0 posición de cada categoría de artículos desde el inicio, en vez de 1 ), con una matriz de mul para registrar el número de cada tipo de programa.
código:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algoritmo> 6 #include <pila> 7 #include <cola> 8 #include <vector> 9 # incluir <mapa> 10 #include < conjunto > 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll largo, largo 14 #define fi primera 15 #define SE segundo 16 #define pb push_back 17 #define me memset 18 const int N = 1E6 + 10 ; 19 const int mod = 1e9 + 7 ; 20 usando espacio de nombres std; 21 par typedef < int , int > PII; 22 typedef par < largo , largo > PLL; 23 24 int k; 25 ll m, American National Standard, un [ 20 ] [ 200 ], mul [ 20 ], num [ 200 ]; 26 27 28 void DFS ( int pos, suma ll) { 29 si (pos> k) de retorno ; 30 para ( int i = 0 ; i <= num [pos]; ++ i) { 31 si (A [pos] [i] + sum> m) { 32 ans + = (num [pos] -i + 1 ) * mul [pos + 1 ]; 33 de retorno ; 34 } 35 dfs (pos + 1 , sum + un [pos] [i]); 36 } 37 } 38 39 int main () { 40 ios :: sync_with_stdio ( falso ); 41 , mientras que (cin >> k >> m) { 42 para ( int i = 1 ; i <= k; ++ i) { 43 cin >> num [i]; 44 para ( int j = 1 ; j <= num [i]; ++ j) { 45 cin >> a [i] [j]; 46 } 47 sort (a [i] + 1 , a [i] + 1 + num [i]); 48 } 49 ans = 0 ; 50 mul [k + 1 ] = 1 ; 51 para ( int i = k; i> = 1 ; - i) mul [i] = mul [i + 1 ] * (num [i] + 1 ); 52 dfs ( 1 , 0 ); 53 printf ( " % LLD \ n " , ans); 54 } 55 56 de retorno 0 ; 57 }
2. Portal: Ganado de pasajeros 14132- Belem Castelnuovo rocío
Significado de las preguntas: P. ¿Es posible llegar a ser una matriz en dos matrices idénticas (elementos deben ser seleccionados de la sub-secuencia)
Solución: violenta de búsqueda directa, [ne] representa el a1 I valor actual o A2 que se añade a, si es igual a 1, a 2 a continuación, dar, o para A1 (A2 que puso el número de espera no ver nunca a1), Si la longitud a1 o a2 es> n / 2, no se describirá esta forma de realización, ya que en cualquier caso el primer número de devolución a un cierto a1, por lo que los dfs directos (1,0,2) .;
código:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algoritmo> 6 #include <pila> 7 #include <cola> 8 #include <vector> 9 # incluir <mapa> 10 #include < conjunto > 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll largo, largo 14 #define fi primera 15 #define SE segundo 16 #define pb push_back 17 #define me memset 18 const int N = 1E6 + 10 ; 19 const int mod = 1e9 + 7 ; 20 usando espacio de nombres std; 21 par typedef < int , int > PII; 22 typedef par < largo , largo > PLL; 23 24 int t; 25 int n, a [N]; 26 int a1 [N], a2 [N]; 27 28 bool dfs ( int P1, intp2, int ne) { 29 si (p1> n / 2 || p2> n / 2 ) de retorno falsa ; 30 Si (ne == n + 1 ) regresan verdadera ; 31 si (a [ne] == a1 [p2 + 1 ]) { 32 a2 [p2 + 1 ] = a [ne]; 33 si (DFS (p1, p2 + 1 , ne + 1 )) de regreso verdadera ; 34 } 35 a1 [p1 + 1 ] = a [ne]; 36 de retornodfs (p1 + 1 , p2, ne + 1 ); 37 } 38 39 int main () { 40 ios :: sync_with_stdio ( falso ); 41 cin >> t; 42 , mientras que (t-- ) { 43 cin >> n; 44 para ( int i = 1 ; i <= n; ++ i) cin >> a [i]; 45 46 A1 [ 1 ] = a [ 1 ]; 47 si (DFS ( 1 , 0 , 2 )) printf (" Frederica Bernkastel \ n " ); 48 otra cosa printf ( " Furude Rika \ n " ); 49 50 } 51 52 de retorno 0 ; 53 }