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++
// 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 partyint 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 codeint 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 partydef 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 codep = 3print(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 partyfunction 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 partyfunction 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 codevar p = 3;document.write( findWaysToPair(p));// This code is contributed by noob2000.</script> |
4
Time Complexity: O(p)
Auxiliary Space: O(p)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



