Skip to content
Related Articles

Related Articles

Improve Article
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 <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;
}

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

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

Javascript




<script>
// Javascript 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.
    var dp = Array(p+1);
 
    dp[1] = 1;
    dp[2] = 2;
 
    // Using the recurrence defined find
    // count for different values of p.
    for (var i = 3; i <= p; i++) {
        dp[i] = dp[i - 1] + (i - 1) * dp[i - 2];
    }
 
    return dp[p];
}
 
// Driver code
var p = 3;
document.write( findWaysToPair(p));
 
// This code is contributed by noob2000.
</script>
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
Recommended Articles
Page :