Este problema se presta a la formulación recursiva con bastante facilidad, podría equivocarme, amablemente corregir / comentar si se encuentran errores.
formas (d [i: n], k, j): = if (i = ny ((k + j = 0) o (kj = 0))) 1; más si (i = n) 0 maneras (d [i: n], k, j): = formas (d [i + 1: n], kj, d [i + 1]) + formas (d [i + 1: n], k + j , d [i + 1]) + formas (d [i + 1: n], k, jd [i + 1])
llamados como formas (d [1: n], k, d [1])
Aquí k es la suma que desea y j es el número temporal actual formado al empalmar el número original desde la posición donde se agrega el último operador y el siguiente operador (‘.’ Se usa como operador de adición). Estoy haciendo la suma o resta del último operador al agregar el siguiente operador.
Creo que se puede memorizar y / u optimizar.
- ¿Qué distingue a un programador profesional de un aficionado? ¿Hay algo que enseñan en la universidad que alguien descuidaría si hubiera aprendido por su cuenta?
- ¿Cuál es mejor para prepararse para la ronda de codificación: bit de entrevista o Hacker Rank?
- ¿Qué empresas o startups debo solicitar para una pasantía?
- ¿Cuál es el proceso de entrevista de Amazon y qué tipo de preguntas hacen cuando se presenta como nuevo?
- ¿Cuáles son algunas cosas interesantes sobre Python?
En cuanto a la parte de la extensión porque desea saber la cantidad de formas en que la suma es divisible por k, por lo que todo lo que necesita hacer es seguir el resto de la suma hasta el momento cuando se divide por k, por lo que cada vez solo suma o resta y modula it (tenga cuidado con el número negativo mientras modula).