Dadas N monedas cada una se puede usar la mayoría de las veces T, ¿de cuántas maneras se puede hacer un valor V usando exactamente K monedas en total?

Esta es la mejor solución que se me ocurre en este momento, puede haber una solución más rápida, pero no puedo pensar en ella en este momento.

Primero redefiniría el problema para tener copias [matemáticas] T [/ matemáticas] de cada una de las monedas [matemáticas] N [/ matemáticas]. Numere las monedas de [math] 1 [/ math] a [math] N \ cdot T [/ math], de modo que [math] val [i] [/ math] sea el valor de [math] i [/ math ] -th moneda.

Entonces deja

[matemáticas] formas [i] [j] [k] = [/ matemáticas] Número de formas en que podemos hacer un valor [matemáticas] j [/ matemáticas] si podemos usar monedas [matemáticas] 1, 2, \ ldots, i [ / math] y tenemos que tomar [math] k [/ math] monedas exactamente.

Para [matemática] 2 \ leq i \ leq N \ cdot T [/ matemática], [matemática] 1 \ leq j \ leq V [/ matemática], [matemática] 1 \ leq k \ leq K [/ matemática] [matemática ] [/matemáticas]

[matemáticas] formas [i] [j] [k] = formas [i-1] [j] [k] [/ matemáticas] (no tome monedas [matemáticas] i [/ matemáticas])
[matemática] + formas [i-1] [j – val [i]] [k-1] [/ matemática] if [matemática] j – val [i] \ geq 0 [/ matemática] (tomar moneda [matemática] i [/ matemáticas])

Para los casos base

  • Hay una forma de hacer un valor de [matemáticas] 0 [/ matemáticas] sin monedas: no tomar nada
    [matemática] formas [i] [0] [0] = 1 [/ matemática] para [matemática] 1 \ leq i \ leq N \ cdot T [/ matemática]
  • Con coin [math] 1 [/ math] solo podemos hacer [math] val [1] [/ math] con una moneda (o 0 sin monedas que está cubierto en el caso anterior)
    [matemática] formas [1] [j] [k] = 1 [/ matemática] if [matemática] val [1] = j [/ matemática] y [matemática] k = 1 [/ matemática] más [matemática] 0 [ /matemáticas]
  • No hay forma de hacer un valor de [matemáticas] 0 [/ matemáticas] con una o más monedas
    [matemáticas] formas [i] [0] [k] = 0 [/ matemáticas] para [matemáticas] 1 \ leq i \ leq N \ cdot T [/ matemáticas], [matemáticas] 1 \ leq k \ leq K [/ matemáticas]

Construir la tabla [matemáticas] formas [i] [j] [k] [/ matemáticas] lleva tiempo [matemáticas] O ([/ matemáticas] [matemáticas] N \ cdot T \ cdot V \ cdot K) [/ matemáticas] que puede ser bastante grande

Puede compararlo con la estrategia de recorrer todos los subconjuntos [matemática] K [/ matemática] de las monedas [matemática] N \ cdot T [/ matemática] que lleva tiempo [matemática] O (\ binom {N \ cdot T} {K}) [/ math] para decidir qué algoritmo es más rápido dependiendo de los parámetros.

Este código hará lo que quieras: (vb.net):

More Interesting

Cómo aprender estructuras de datos y algoritmos

Cómo ser bueno en el desarrollo de algoritmos muy complejos

¿Cuáles son algunos algoritmos de aprendizaje automático que pueden ayudarme a encontrar las similitudes o diferencias entre las ideas textuales?

¿En qué se diferencia una tabla hash de una lista vinculada o una matriz?

¿Cómo se calculan los puntos de clasificación para un desafío en CodeEval?

¿Puede alguien ayudarme a preparar un plan para preparar estructuras de datos y algoritmos en un mes de tiempo desde el punto de vista de las entrevistas?

¿Qué debo hacer en mis vacaciones de verano, dado que soy estudiante de informática (1er año)?

Cómo guardar un árbol binario en una matriz de recorrido en orden

¿Es útil leer 5 o más libros para algoritmos, o debería leer solo uno o dos y usar los otros como referencia para algún algoritmo en particular?

¿Necesito tener el conocimiento de las estructuras de datos y el algoritmo, antes de comenzar a practicar en spoj, codchef, topcoder, etc.? Sé un poco de C ++.

¿De dónde viene la palabra algoritmo?

¿Qué es un filtro de floración y para qué se utilizan?

¿Hay algún algoritmo de ordenación que funcione en el orden de n?

¿Cómo imprimir todos los N dígitos (N es un número par) de un número Torn con una complejidad menor que O (N ^ 2)? ¿Qué algoritmo debo usar?

¿Cuántas repeticiones del algoritmo L, U, R, D en un cubo de Rubik se necesitarían para revertir el cubo a su permutación original?