Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int f(int i, int j, int steps, vector<vector<int>>& grid, vector<vector<int>>& dp) {
- int n = grid.size();
- int m = grid[0].size();
- if (i >= n || j >= m) {
- return 1e9;
- }
- if (i == n - 1 && j == m - 1) {
- return steps;
- }
- if (dp[i][j] != -1) {
- return dp[i][j];
- }
- int ans = 1e9;
- for (int right = j + 1; right <=j + grid[i][j]; right++) {
- ans = min(ans, f(i, right, steps + 1, grid, dp));
- }
- for (int down = i + 1; down <= i + grid[i][j]; down++) {
- ans = min(ans, f(down, j, steps + 1, grid, dp));
- }
- return dp[i][j] = ans;
- }
- int minimumVisitedCells(vector<vector<int>>& grid) {
- int n = grid.size();
- int m = grid[0].size();
- vector<vector<int>> dp(n, vector<int>(m, -1));
- int ans = f(0, 0, 1, grid, dp);
- return (ans >= 1e9) ? -1 : ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment