Cómo resolver la Competencia de Computación Canadiense de 1996, Etapa 1, Problema C (vea el enlace del problema a continuación)

Este es el problema:

Así es como lo hago:

clase pública Quora_Answer {
public static void main (String [] args) {
int num_1s = Integer.parseInt (args [0]);
int num_bits = Integer.parseInt (args [1]);

System.out.println (“Método 1”);
soln_1 (num_1s, num_bits);
System.out.println ();
}

vacío estático privado soln_1 (int num_1s, int num_bits) {
int [] bit_counts = {num_bits – num_1s, num_1s};
int [] contador = {1};
soln_1_helper (nueva ArrayList (), bit_counts, num_bits, counter);
}

private static void soln_1_helper (List pattern, int [] bit_counts, int num_bits, int [] counter) {
if (pattern.size () == num_bits) {
print_pattern (patrón, contador [0] ++);
regreso;
}

para (int i = 1; i> = 0; i–) {
if (bit_counts [i]> 0) {
bit_counts [i] -;
pattern.add (i);
soln_1_helper (patrón, bit_counts, num_bits, counter);
pattern.remove (pattern.size () – 1);
bit_counts [i] ++;
}
}
}

private static void print_pattern (patrón List , int counter) {
System.out.printf (“% 7d:”, contador);
para (int i: patrón) {
System.out.print (i + “”);
}
System.out.println ();
}
}

Salida de muestra:

java Quora_Answer 1 16
Método 1
1: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
4: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
5: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
6: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
7: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
8: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
9: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
10: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
11: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
12: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
13: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
14: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
15: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
16: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

java Quora_Respuesta 4 6
Método 1
1: 1 1 1 1 0 0
2: 1 1 1 0 1 0
3: 1 1 1 0 0 1
4: 1 1 0 1 1 0
5: 1 1 0 1 0 1
6: 1 1 0 0 1 1
7: 1 0 1 1 1 0
8: 1 0 1 1 0 1
9: 1 0 1 0 1 1
10: 1 0 0 1 1 1
11: 0 1 1 1 1 0
12: 0 1 1 1 0 1
13: 0 1 1 0 1 1
14: 0 1 0 1 1 1
15: 0 0 1 1 1 1

java Quora_Answer 2 4
Método 1
1: 1 1 0 0
2: 1 0 1 0
3: 1 0 0 1
4: 0 1 1 0
5: 0 1 0 1
6: 0 0 1 1

Es un problema de recursión relativamente simple. Observe que el conjunto de patrones con [math] n [/ math] bits, [math] k [/ math] de los cuales son unos, se puede dividir en dos conjuntos:

  1. Los que comienzan con 0, y son seguidos por un patrón con [math] n-1 [/ math] bits de los cuales [math] k [/ math] son ​​unos,
  2. Los que comienzan con 1, y son seguidos por un patrón con [math] n-1 [/ math] bits de los cuales [math] k-1 [/ math] son ​​unos.

Eso sugiere cómo configurar la recursividad. También debe realizar algunas podas básicas para evitar realizar llamadas recursivas [math] 2 ^ n [/ math].

More Interesting

¿Qué cursos de matemáticas en la universidad son más importantes para la informática?

¿Debo especializarme en informática teórica o aprendizaje automático?

¿Hay algún problema que requiera más tiempo exponencial de resolución (por ejemplo, doble exp.) Pero que pueda verificarse en tiempo polinómico determinista?

¿Por qué los académicos se abstienen de escribir libros con la brevedad e intuición de las conferencias?

¿Cómo es útil la optimización convexa en la industria tecnológica?

¿Cuántas pruebas hay para secuencias?

¿Cuáles son los departamentos de investigación más sólidos para la teoría de la computabilidad (recursividad) en el mundo en este momento?

¿Existe una función que crece más rápido que cualquier función computable, pero que crece a un ritmo fundamentalmente más lento que el de la función Busy Beaver?

Cómo hacer un programa en c ++ que pueda factorizar un número de 10 dígitos

¿Quiénes son las estrellas en ascenso en la informática teórica?

¿Cómo obtengo un límite superior para T (n) = T (n / 2) + n?

¿Qué aprendería una función de valor de acción de estado si colocamos múltiples objetivos en el espacio de estado y nos movemos de un punto de partida a un objetivo y luego de un objetivo a otro utilizando el aprendizaje de refuerzo con aproximación de funciones?

Cómo usar Excel para encontrar la mediana sin usar una función

Dada una matriz sin clasificar que contiene un número impar de ocurrencias para todos los números, excepto un número, ¿cómo se puede encontrar ese número?

¿Es elusiva la comprensión fundamental del aprendizaje automático? ¿Requiere habilidad matemática innata?