HOUSE ROBBER
*********************************RECURSION**********************************
import java.util.*;
public class HOUSEROBBER {
public static int findMaxMoney(int nums[], int i) {
int n=nums.length;
if (i>=n) {
return 0;
}
int rob=findMaxMoney(nums, i+2)+nums[i];
int donotrob=findMaxMoney(nums, i+1);
return Math.max(rob, donotrob);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number of houses:");
int n = sc.nextInt();
int nums[] = new int[n];
System.out.println("Enter money of each house:");
for (int i = 0; i < nums.length; i++) {
nums[i] = sc.nextInt();
}
System.out.println("The maximum amount of money that can be robbed:" + findMaxMoney(nums, 0));
}
}
**********************************MEMOIZATION*****************************
import java.util.*;
public class HouseRobberMEMo {
public static int rob(int nums[]) {
int n = nums.length;
int dp[] = new int[n];
Arrays.fill(dp, -1);
int i = 0;
return findMax(nums, n, dp, i);
}
public static int findMax(int nums[], int n, int dp[], int i) {
if (i >= n) {
return 0;
}
if (dp[i] != -1) {
return dp[i];
}
int rob = findMax(nums, n, dp, i + 2) + nums[i];
int donotrob = findMax(nums, n, dp, i + 1);
dp[i] = Math.max(rob, donotrob);
return dp[i];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number of houses:");
int n = sc.nextInt();
int nums[] = new int[n];
System.out.println("Enter money of each house:");
for (int i = 0; i < nums.length; i++) {
nums[i] = sc.nextInt();
}
System.out.println("The max amount of money:" + rob(nums));
}
}
**********************************TABULATION*********************************
import java.util.*;
public class HouseRobberTabulization {
public static int rob(int[] nums) {
int n = nums.length;
int[] dp = new int[n + 1];
dp[0] = nums[0];
dp[1] = n > 1 ? Math.max(nums[0], nums[1]) : nums[1];
for (int i = 2; i < n; i++) {
int rob = dp[i - 2] + nums[i];
int donotrob = dp[i - 1];
dp[i] = Math.max(rob, donotrob);
}
return dp[n - 1];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number of houses:");
int n = sc.nextInt();
int nums[] = new int[n];
System.out.println("Enter money of each house:");
for (int i = 0; i < nums.length; i++) {
nums[i] = sc.nextInt();
}
System.out.println("The max amount of money:" + rob(nums));
}
}
i
Comments
Post a Comment