Module: combinações


Problem

1 /3


Número de combinações

Theory Click to read/hide

Combinações de n elementos por k são compostos que podem ser formados a partir de n elementos, reunindo k elementos em cada ligação; enquanto as conexões diferem umas das outras apenas pelos próprios elementos (a diferença na ordem de seu arranjo não é levada em consideração).
 
Por exemplo, as seguintes combinações podem ser formadas a partir de 3 elementos (a,b,c)(a,b,c) 2 cada: ab,ac,bc.
 
O número de todas as combinações possíveis que podem ser formadas de n elementos por k é indicado pelo símbolo  e calculado pela fórmula:
 
Existem duas maneiras de encontrar o número de combinações 
 
1. Encontre n!, k!, (n – k)! e de acordo com a fórmula acima, calculamos a quantidade, mas a partir de – devido a possível estouro, este método pode ser usado com n <= 12.
 
2. Com programação dinâmica.
 
O DP se parecerá com o triângulo de Pascal, com uns no topo e nas arestas, e cada número é igual à soma dos dois números acima dele.





Uma função que conta o número de combinações usando programação dinâmica em O(n ^2):

int C(int n, int k)
{
vector<vector<int> > dp(n + 1, vetor<int>(n + 1, 1)); // Cria um array dp de tamanho (n + 1, n + 1)
para (int i = 0; i <= n; i++) // Preencha a i-ésima linha do array
{
para (int j = 1; j < i; j++)
{
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]; //recalculando (i;j) a posição através de (i - 1; j - 1) e (i - 1; j) 
}
}
retorno dp[n][k]; //valor de retorno 
}

Problem

Dados os números n e k (\(0 <= k <= n\),  ; \(0< n<=12\)) calcula o número de combinações  \(C_n^k\) < /span>.
 

 

Exemplos
# Entrada Saída
1 2 8 28