Considere todas las 2^ndiferentes cadenas binarias de longitud ny asuma n > 2. Se le permite eliminar exactamente b < n/2bits de cada una de las cadenas binarias, dejando cadenas de longitud n-brestante. El número de cadenas distintas restantes depende de los bits que elimine. Asumiendo que su objetivo es dejar el menor número posible de cadenas diferentes, este desafío es escribir código para calcular qué tan pocos puede dejar en función de n.
Ejemplo n=3y b = 1. Puede dejar solo las dos cadenas 11y 00.
Para n=9y b = 1,2,3,4tenemos70,18,6,2
Para n=8y b = 1,2,3tenemos40,10,4
Para n=7y b = 1,2,3tenemos20,6,2
Para n=6y b = 1,2tenemos12,4
Para n=5y b = 1,2tenemos6,2
Esta pregunta fue originalmente planteada por mí en 2014 en una forma diferente en MO .
Entrada y salida
Su código debe incluir un entero ny generar un solo entero para cada valor de bcomenzar b = 0y aumentar.
Puntuación
Su puntaje es el más grande npara el cual su código se completa para todos b < n/2en menos de un minuto en mi PC con Linux. En caso de desempate, cuanto mayor sea bsu código para las mayores nganancias conjuntas . En caso de desempate también en ese criterio, el código más rápido para los valores más grandes de ny bdecide. Si los tiempos están dentro de un segundo o dos entre sí, la primera respuesta publicada gana.
Idiomas y bibliotecas
Puede usar cualquier idioma de la biblioteca que desee. Debido a que tengo que ejecutar su código, ayudaría si fuera gratis (como en cerveza) y funcionara en Linux.
fuente

b > 0como requisito de entrada adicional? ¿O simplementen=3y como resultado?b=02^n2^nhecho.ny únicab, pero la puntuación es la más grandenpara la cual el código completa todob < n/2en menos de un minuto. ¿No sería mejor tener una sola entradanen ese caso y generar todos los resultados0 <= b < n/2? O debemos proporcionar dos programas / funciones: uno teniendo dos entradasnyb, y uno tomando solamente la entradany la salida de todos los resultados en el rango0 <= b < n/2?Respuestas:
Python 2.7 / Gurobi n = 9
Esta solución es un uso muy directo del solucionador ILP de Gurobi para los problemas booleanos de enteros mixtos (MIP).
El único truco es eliminar la simetría en el complemento de 1 para reducir a la mitad los tamaños del problema.
Al usar la licencia "gratuita" de tiempo limitado de Gurobi LLC, estamos restringidos a 2000 restricciones, pero resolver 10 del 1 está muy por encima del límite de tiempo de 60 segundos de todos modos en mi computadora portátil.
ACTUALIZACIÓN + CORR: 10,2 tiene un tamaño de solución óptimo 31 (ver, por ejemplo) Gurobi muestra que no existe una solución simétrica de tamaño 30 (el problema no es factible). patrones de enteros
0 7 13 14 25 28 35 36 49 56 63 64 95 106 118 128 147 159 170 182 195 196 200 207 225 231 240 243 249 252 255o0 7 13 14 19 25 28 35 36 49 56 63 64 95 106 118 128 159 170 182 195 196 200 207 225 231 240 243 249 252 255fuente
C ++, n = 6
Fuerza bruta con algunas pequeñas optimizaciones.
Ejecutar localmente:
fuente