Tuesday, February 15, 2022

Friends Pairing

https://www.geeksforgeeks.org/friends-pairing-problem/


package pep.Day20;

import java.util.Arrays;
import java.util.Scanner;

public class FriendsPairing {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(recursion(n));

long[] dp = new long[n + 1];
Arrays.fill(dp, -1);
System.out.println(recursionMemo(n, dp));
display(dp);

Arrays.fill(dp, -1);
System.out.println(recursionTabulation(n, dp));
display(dp);
}

private static void display(long[] dp) {
for (long x : dp)
System.out.print(x + "\t");
System.out.println();
}

public static int recursion(long n) {
if (n == 0)
return 1;

int single = 1 * recursion(n - 1);
int pair = 0;
if (n > 1) // if n > 1, then only pair will exist
pair = (n - 1) * recursion(n - 2);
return single + pair;
}

public static int recursionMemo(int n, long[] dp) {
if (n == 0)
return dp[n] = 1;

if (dp[n] != -1) return dp[n];
int single = 1 * recursionMemo(n - 1, dp);
int pair = 0;
if (n > 1) // if n > 1, then only pair will exist
pair = (n - 1) * recursionMemo(n - 2, dp);
return dp[n] = single + pair;
}

public static int recursionTabulation(int N, long[] dp) {

for (int n = 0; n <= N; n++) {
if (n == 0) {
dp[n] = 1;
continue;
}

//if (dp[n] != -1) return dp[n];

int single = 1 * dp[n - 1];//recursionMemo(n - 1, dp);
int pair = 0;
if (n > 1) // if n > 1, then only pair will exist
pair = (n - 1) * dp[n - 2];//recursionMemo(n - 2, dp);
dp[n] = (single + pair) % ((long) 1e9 + 7);
}
return dp[N];
}
}


No comments:

Post a Comment

Diagonal Traversal

 eg.  1       2       3       4 5      6       7       8 9    10    11     12 13  14   15    16 Output: 1 6 11 16 2 7 12 3 8 4  Approach:...