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:
// 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 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 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# 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 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 ?> |
<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> |
4
Time Complexity: O(p)
Auxiliary Space: O(p)