4117: problemas simples de división de enteros (programación dinámica)

 

límite de tiempo total: 
100 ms
 
Límite de memoria: 
65536kB
descripción

El número entero positivo n representa como una serie de positivo y número entero, n = n1 + n2 + ... + nk, donde n1> = n2> = ...> = nk> = 1, k> = 1.
Esto representa un número entero positivo n es un entero positivo n se llama partición. Dividiendo el número de diferente número entero positivo n se llama el número de división n, un número entero positivo.

entrada
entrada de prueba estándar que comprende una pluralidad de conjuntos de datos. Cada prueba es un número entero N (0 <n <= 50).
exportación
Los datos, el número de divisiones N de la salida de cada prueba.
entrada de la muestra
5
Ejemplo de salida
7
rápido
5, 4 + 1, 3 + 2, 3 + 1 + 1, 2 + 2 + 1, 2 + 1 + 1 + 1, 1 + 1 + 1 + 1 + 1
1  @ resolver las ideas: la planificación problema de la mochila completamente típica dinámica
 2  // Si las entradas a 5, en el que se pueden considerar como que comprende cinco elementos, el valor, respectivamente 1,2,3,4,5
 3  / / cada elemento se puede seleccionar varias veces, el valor de tiempo se han acumulado un número seleccionado de artículos 5
 4.  // puede utilizar una matriz unidimensional de desplazamiento
 5  // ecuación de transición de estado: dp [j] = dp [ ji] + dp [ J] 
. 6 #include <bits / STDC ++ H.>
 7.  el uso de  espacio de nombres STD;
 . 8  int main () {
 9.      int N;
 10      al mismo tiempo (CIN >> N) {
 11.          int DP [ 1010 ];
 12 es          Memset (DP, 0 , la sizeof (DP));
 13 es         dp [ 0 ] = 1 ;
14          para ( int i = 1 ; i <= N; ++ i)
 15              para ( int j = i; j <= N; ++ j) {
 16                  dp [j] = dp [j - i] + dp [ j];
17              }
 18          cout << dp [N] << endl;
19      }
 20      de retorno  0 ;
21 }

 

Supongo que te gusta

Origin www.cnblogs.com/aiqinger/p/12601646.html
Recomendado
Clasificación