Búsqueda binaria la respuesta
Aquí usamos la búsqueda binaria para encontrar nuestra respuesta. Primero suponemos que nuestra respuesta está en algún rango [0, 1000000]. Luego usamos la búsqueda binaria para encontrar el elemento. En cada iteración podemos reducir el rango a la mitad.
Por ejemplo, nuestra función es f (x) = 5 + 7. La respuesta es 12.
Comenzamos nuestra búsqueda asumiendo que la respuesta está en [0,100]. Tomamos mid = 50 y lo comparamos con la función y ahora el rango es [0,50]. De esta manera encontraremos que la respuesta es 12.
Exactamente el problema anterior se puede resolver con este método.
Te daré la plantilla para resolver este tipo de problemas.
#define EPS 1e-9
bool can (doble f) {
// encuentra la cantidad de juguetes que podemos producir con este tiempo mínimo
// si el número de juguetes es mayor que nuestro valor requerido, devuelve verdadero, lo que significa que omitimos la mitad derecha del rango
// o bien devolver falso para omitir la mitad izquierda del rango
}
// dentro de int main ()
// binario busca la respuesta
doble lo = 0.0, hi = 1000000.0, mid = 0.0, ans = 0.0
while (fabs (hi-lo)> EPS) {
mid = (lo + hi) / 2;
if (can (mid)) {ans = mid; hola = medio; }
sino lo = medio;
}
El ans es nuestro valor requerido.
Para evitar la precisión, es mejor usar un número constante de iteraciones en lugar de permitir que el número de iteraciones varíe dinámicamente.
- ¿Codeforces tiene un problema de ética?
- Cómo maximizar el XOR entre un número constante y múltiples matrices con un solo trie si los elementos de la matriz pueden ser comunes
- ¿Puede la longitud de un comando Mathematica o Wolfram | Alpha ser una aproximación aproximada de su complejidad de Kolmogorov?
- Cómo calcular la similitud semántica entre un automóvil y una bicicleta mediante el algoritmo Jian y Conrath
- ¿Cuál es el mejor algoritmo para sumar números en matrices anidadas?