# Number of ways to pair people

Given that there are p people in a party. Each person can either join dance as a single individual or as a pair with any other. The task is to find the number of different ways in which p people can join the dance.

**Examples:**

Input :p = 3Output :4 Let the three people be P1, P2 and P3 Different ways are: {P1, P2, P3}, {{P1, P2}, P3}, {{P1, P3}, P2} and {{P2, P3}, P1}.Input :p = 2Output :2 The groups are: {P1, P2} and {{P1, P2}}.

**Approach:** The idea is to use dynamic programming to solve this problem. There are two situations: Either the person join dance as single individual or as a pair. For the first case the problem reduces to finding the solution for p-1 people. For the second case, there are p-1 choices to select an individual for pairing and after selecting an individual for pairing the problem reduces to finding solution for p-2 people as two people among p are already paired.

So the formula for dp is:

dp[p] = dp[p-1] + (p-1) * dp[p-2].

Below is the implementation of the above approach:

## C++

`// CPP program to find number of ways to ` `// pair people in party ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find number of ways to ` `// pair people in party ` `int` `findWaysToPair(` `int` `p) ` `{ ` ` ` `// To store count of number of ways. ` ` ` `int` `dp[p + 1]; ` ` ` ` ` `dp[1] = 1; ` ` ` `dp[2] = 2; ` ` ` ` ` `// Using the recurrence defined find ` ` ` `// count for different values of p. ` ` ` `for` `(` `int` `i = 3; i <= p; i++) { ` ` ` `dp[i] = dp[i - 1] + (i - 1) * dp[i - 2]; ` ` ` `} ` ` ` ` ` `return` `dp[p]; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `p = 3; ` ` ` `cout << findWaysToPair(p); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find number of ways to ` `// pair people in party ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find number of ways to ` `// pair people in party ` `static` `int` `findWaysToPair(` `int` `p) ` `{ ` ` ` `// To store count of number of ways. ` ` ` `int` `dp[] = ` `new` `int` `[p + ` `1` `]; ` ` ` ` ` `dp[` `1` `] = ` `1` `; ` ` ` `dp[` `2` `] = ` `2` `; ` ` ` ` ` `// Using the recurrence defined find ` ` ` `// count for different values of p. ` ` ` `for` `(` `int` `i = ` `3` `; i <= p; i++) ` ` ` `{ ` ` ` `dp[i] = dp[i - ` `1` `] + (i - ` `1` `) * dp[i - ` `2` `]; ` ` ` `} ` ` ` ` ` `return` `dp[p]; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` ` ` `int` `p = ` `3` `; ` ` ` `System.out.println(findWaysToPair(p)); ` `} ` `} ` ` ` `// This code is contributed by Arnab Kundu ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find number of ` `# ways to pair people in party ` ` ` `# Function to find number of ways ` `# to pair people in party ` `def` `findWays(p): ` ` ` ` ` `# To store count of number of ways. ` ` ` `dp ` `=` `[` `0` `] ` `*` `(p ` `+` `1` `) ` ` ` `dp[` `1` `] ` `=` `1` ` ` `dp[` `2` `] ` `=` `2` ` ` ` ` `# Using the recurrence defined find ` ` ` `# count for different values of p. ` ` ` `for` `i ` `in` `range` `(` `3` `, p ` `+` `1` `): ` ` ` `dp[i] ` `=` `(dp[i ` `-` `1` `] ` `+` ` ` `(i ` `-` `1` `) ` `*` `dp[i ` `-` `2` `]) ` ` ` `return` `dp[p] ` ` ` `# Driver code ` `p ` `=` `3` `print` `(findWays(p)) ` ` ` `# This code is contributed by Shrikant13 ` |

*chevron_right*

*filter_none*

## C#

`// C# program to find number of ways to ` `// pair people in party ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find number of ways to ` `// pair people in party ` `public` `static` `int` `findWaysToPair(` `int` `p) ` `{ ` ` ` `// To store count of number of ways. ` ` ` `int` `[] dp = ` `new` `int` `[p + 1]; ` ` ` ` ` `dp[1] = 1; ` ` ` `dp[2] = 2; ` ` ` ` ` `// Using the recurrence defined find ` ` ` `// count for different values of p. ` ` ` `for` `(` `int` `i = 3; i <= p; i++) ` ` ` `{ ` ` ` `dp[i] = dp[i - 1] + (i - 1) * dp[i - 2]; ` ` ` `} ` ` ` `return` `dp[p]; ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main(` `string` `[] args) ` `{ ` ` ` `int` `p = 3; ` ` ` `Console.WriteLine(findWaysToPair(p)); ` `} ` `} ` ` ` `// This code is contributed by shrikanth13 ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to find number of ways ` `// to pair people in party ` ` ` `// Function to find number of ways to ` `// pair people in party ` `function` `findWaysToPair(` `$p` `) ` `{ ` ` ` `// To store count of number of ways. ` ` ` `$dp` `= ` `array` `(); ` ` ` ` ` `$dp` `[1] = 1; ` ` ` `$dp` `[2] = 2; ` ` ` ` ` `// Using the recurrence defined find ` ` ` `// count for different values of p. ` ` ` `for` `(` `$i` `= 3; ` `$i` `<= ` `$p` `; ` `$i` `++) ` ` ` `{ ` ` ` `$dp` `[` `$i` `] = ` `$dp` `[` `$i` `- 1] + ` ` ` `(` `$i` `- 1) * ` `$dp` `[` `$i` `- 2]; ` ` ` `} ` ` ` ` ` `return` `$dp` `[` `$p` `]; ` `} ` ` ` `// Driver code ` `$p` `= 3; ` `echo` `findWaysToPair(` `$p` `); ` ` ` `// This code is contributed ` `// by Akanksha Rai ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

4

**Time Complexity:** O(p)

**Auxiliary Space:** O(p)

## Recommended Posts:

- Count ways to distribute m items among n people
- Minimum and Maximum number of pairs in m teams of n people
- Number of ways to calculate a target number using only array elements
- Count number of ways to divide a number in 4 parts
- Number of ways to represent a number as sum of k fibonacci numbers
- Number of ways to get a given sum with n number of m-faced dices
- Count number of ways to get Odd Sum
- Ways to represent a number as a sum of 1's and 2's
- Check if all people can vote on two machines
- Number of ways to get even sum by choosing three numbers from 1 to N
- Number of ways to go from one point to another in a grid
- Number of ways to reach the end of matrix with non-zero AND value
- Number of ways to arrange N items under given constraints
- Count the number of ways to traverse a Matrix
- Number of ways to cut a stick of length N into K pieces

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.