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 = 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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


Output:

4

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



My Personal Notes arrow_drop_up

A Programmer and A Machine learning Enthusiast

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.