``` class Solution { public int superEggDrop(int m, int n) { m += 1; n += 1; int[][] dp = new int[m][n]; for (int i = 0; i < m; i++) { dp[i][0] = 0; dp[i][1] = 1; } for (int i = 0; i < n; i++) { dp[0][i] = 0; dp[1][i] = i; } for (int i = 2; i < m; i++) { for (int j = 2; j < n; j++) { int low = 1, high = j; int ans = Integer.MAX_VALUE; while (low <= high) { int mid = (low + high) / 2; int broken = dp[i - 1][mid - 1]; // egg breaks int notBroken = dp[i][j - mid]; // egg doesn't break int temp = 1 + Math.max(broken, notBroken); if (broken < notBroken) { low = mid + 1; } else { high = mid - 1; } ans = Math.min(ans, temp); } dp[i][j] = ans; } } return dp[m - 1][n - 1]; } } ``` explain this code

视频信息