Quora User, ¿cuál es la restricción del valor de n? es menos de 20?
si n alrededor de 20, entonces podemos usar (enmascaramiento de bits + dp) junto con la memorización para resolver el problema con dp [i] [j] donde i es la suma requerida para llegar a cero y j es la máscara de bits en la que se establecen todos los bits más para usar y los bits que no están establecidos ya se usan, por lo que dp [n] [2 ^ n] hará el trabajo.
Para la restricción n = 1000 alrededor
usaremos dos matrices, primero una matriz booleana (usada) un tamaño = suma acumulativa de todos los elementos de n suma vi donde 1 <= i <= n. y el conjunto usado [0] = verdadero, eso significa que la suma de cero es posible y dp [0] = 0, lo que significa que se requieren 0 monedas para obtener la suma como 0,
Luego, para cada elemento 1 <= i <= n, verificamos si del número de moneda con denominación vi podemos obtener una suma particular … entonces el código es el siguiente;
int dp [suma acumulativa];
bool utilizado [suma acumulativa];
memset (dp, INT_MAX, tamaño de dp);
memset (usado, falso, tamaño de usado);
dp [0] = 0;
utilizado [0] = falso;
para (int i = 0; i <n; i ++) {
para (int j = S; j> = 0; j -) {
if (usado [j]) {
utilizado [j + v [i]] = verdadero;
dp [j + v [i]] = min (dp [j + v [i]], dp [j] +1);
}
}
}
if (dp [S]! = INT_MAX)
cout << dp [S] << endl;
más
cout << "no es posible" <endl;
Espero que tengas la lógica detrás de eso 🙂
- ¿Es este algoritmo una nueva aplicación de la fórmula del producto Euler?
- ¿Cuál es la forma más eficiente en cuanto al espacio para almacenar una gran variedad de enteros, donde todos los enteros están entre 0-2, inclusive?
- Cómo encontrar aproximadamente la región más densa de un gráfico
- ¿Cuál es la mejor manera de resolver un programa lineal, el método del multiplicador de Lagrange o el método simplex?
- ¿Se espera que todas las empresas nuevas resuelvan un problema para ser rentables y exitosas (tecnología, artículos comunes, industria de la moda)?