Skip to content
Related Articles
Number of ways to pair people
• Difficulty Level : Medium
• Last Updated : 21 Apr, 2021

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 = 3
Output : 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 = 2
Output : 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 ``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;``    ``dp = 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;``}`

## 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`

## 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`

## 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;``    ``dp = 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`

## PHP

 ``

## Javascript

 ``
Output:

`4`

Time Complexity: O(p)
Auxiliary Space: O(p)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up