diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 920475c..1b1ab89 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,8 +5,8 @@
-
-
+
+
@@ -93,8 +93,8 @@
-
-
+
+
@@ -107,7 +107,7 @@
-
+
@@ -118,7 +118,7 @@
true
-
+
@@ -131,7 +131,7 @@
-
+
@@ -216,11 +216,11 @@
+
-
diff --git a/src/main/java/problemset/a0931/MinFallingPathSum.java b/src/main/java/problemset/a0931/MinFallingPathSum.java
new file mode 100644
index 0000000..b5c79c8
--- /dev/null
+++ b/src/main/java/problemset/a0931/MinFallingPathSum.java
@@ -0,0 +1,21 @@
+package problemset.a0931;
+
+public class MinFallingPathSum {
+ public int minFallingPathSum(int[][] matrix) {
+ int n = matrix.length;
+ var f = new int[n];
+ for (var row : matrix) {
+ var g = f.clone();
+ for (int j = 0; j < n; j++) {
+ if (j > 0) g[j] = Math.min(g[j], f[j - 1]);
+ if (j + 1 < n) g[j] = Math.min(g[j], g[j + 1]);
+ g[j] += row[j];
+ }
+ f = g;
+ }
+ int ans = Integer.MAX_VALUE;
+ for (var x : f)
+ ans = Math.min(ans, x);
+ return ans;
+ }
+}
diff --git a/src/test/java/problemset/a0931/MinFallingPathSumTest.java b/src/test/java/problemset/a0931/MinFallingPathSumTest.java
new file mode 100644
index 0000000..795c600
--- /dev/null
+++ b/src/test/java/problemset/a0931/MinFallingPathSumTest.java
@@ -0,0 +1,34 @@
+package problemset.a0931;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class MinFallingPathSumTest {
+
+ private MinFallingPathSum sum;
+ private int[][] testcaseOne;
+ private int[][] testcaseTwo;
+
+ @BeforeEach
+ void setUp() {
+ sum = new MinFallingPathSum();
+ testcaseOne = new int[][]{{2, 1, 3}, {6, 5, 4}, {7, 8, 9}};
+ testcaseTwo = new int[][]{{-19, 57}, {-40, -5}};
+ }
+
+ @Test
+ void test_minFallingPathSum_v1() {
+ var expectedResult = 13;
+ var actualResult = sum.minFallingPathSum(testcaseOne);
+ assertEquals(expectedResult, actualResult);
+ }
+
+ @Test
+ void test_minFallingPathSum_v2() {
+ var expectedResult = -59;
+ var actualResult = sum.minFallingPathSum(testcaseTwo);
+ assertEquals(expectedResult, actualResult);
+ }
+}
\ No newline at end of file