1 // Método a: el número de elementos recursivos y volumen Objeto n array a [100] para las variables globales;
2 // COUNT (i, SUM) representa el número de combinaciones desde el inicio de la i-ésima de vuelta matriz para estadísticas y suma del número de tipos,
3. // suma y combinación de números es: COUT (I, suma) = COUT (. I + 1, sum-a [I]) + COUT (. I + 1, sum),
. 4 // en el que cout (i + 1, SUM- a [i]) representa contiene a [i], es decir, desde la primera i + 1 siguiente número de recuento
5 // número y combinación de suma-a [i] es el número de tipo, y cout (i + 1, suma) indica no comprende a [i], es decir, a partir del número i + 1 combinación en adelante estadística de los números y el número de tipos de ******** suma ***************************
. 6 #include <la iostream>
7. el uso de espacio de nombres STD;
. 8
9. int A [ 100 ];
10 int n- = . 1 ;
. 11 int COUNT (int I, int suma) {
12 es SI (suma == 0 ) {
13 es retorno 1. ; // encontrar un conjunto de suma y el número de combinación;
14 }
15 IF (I == n-sum || < 0 ) devuelven 0 ; // I == ningún otro n-número de instrucciones se combinan, sum <0 indicar que no una combinación;
16 retorno COUNT (I + . 1 , a-sUM [I]) + COUNT (I + 1. , sUM); // de la matriz i es empecé, que comprende A [i], y no incluye;
. 17 }
18 es
19. int main () {
20 es el tiempo (CIN >> n-) {
21 es para ( int i = 0 ; i <n; i ++ )
22 cin >> a [i];
23 tribunal << contar ( 0 , 40 ) << endl;
24 }
25 de retorno 0 ;
26 }
1 // Método dos: dinámico de programación
2 #include <la iostream>
. 3 el uso de espacio de nombres STD;
. 4 #define N 100
. 5 int n-, A [N];
. 6 int main () {
7. El tiempo (CIN >> n-) {
8. Int (DP *) [ 50 ] = new new int [N] [ 50 ]; // DP [i] [j] indica el i-ésimo elemento en el volumen frente Couchu J;
. 9 para ( int i = 1. ; i <= N-; ++ I ) {
10 CIN >> A [I];
. 11 DP [I] [0 ] = 1 ; // 初始边界
12 }
13 dp [ 0 ] [ 0 ] = 1 ;
14 para ( int i = 1 ; i <= n; i ++ )
15 para ( int j = 1 ; j <= 40 ; j ++ ) {
16 dp [i] [j] = dp [i- 1 ] [j];
17 si (a [i] <= j)
18 dp [i] [j] + = dp [i- 1 ] [j- a [i]];
19 }
20 cout << dp [n] [ 40 ] << endl;
21 delete [] dp;
22 }
23 de retorno 0 ;
24 }