diff --git a/Problem1.java b/Problem1.java new file mode 100644 index 00000000..d5130990 --- /dev/null +++ b/Problem1.java @@ -0,0 +1,20 @@ +class Problem1 { + public int minCost(int[][] costs) { + int m = costs.length; + int n = costs[0].length; + + int[][] dp = new int[m][n]; + + dp[m-1][0] = costs[m-1][0]; + dp[m-1][1] = costs[m-1][1]; + dp[m-1][2] = costs[m-1][2]; + + for(int i = m - 2; i >= 0; i--) { + dp[i][0] = costs[i][0] + Math.min(dp[i+1][1], dp[i+1][2]); + dp[i][1] = costs[i][1] + Math.min(dp[i+1][0], dp[i+1][2]); + dp[i][2] = costs[i][2] + Math.min(dp[i+1][0], dp[i+1][1]); + } + + return Math.min(dp[0][0], Math.min(dp[0][1], dp[0][2])); + } +} diff --git a/Problem2.java b/Problem2.java new file mode 100644 index 00000000..1865cb4d --- /dev/null +++ b/Problem2.java @@ -0,0 +1,21 @@ +class Problem2 { + public int change(int amount, int[] coins) { + int m = coins.length; + int n = amount; + + int[][] dp = new int[m+1][n+1]; + dp[0][0] = 1; + + for(int i=1; i<=m; i++){ + for(int j=0; j<=n; j++){ + if(j < coins[i-1]){ + dp[i][j] = dp[i-1][j]; + }else{ + dp[i][j] = dp[i-1][j] + dp[i][j - coins[i-1]]; + } + } + } + + return dp[m][n]; + } +}