DP Minimum Path Sum
来源:互联网 发布:mac破解软件 哪个网站 编辑:程序博客网 时间:2024/06/07 09:06
思想:
方法一:DP
状态方程:
f[i][0] 可以提前求出; 0 <= i < m
f[0][i] 可以提前求出; 0 <= i < n
f[i][j] = min( f[i-1][j], f[i][j-1]) + grid[i][j];
class Solution {public: int minPathSum(vector<vector<int> > &grid) { int m = grid.size(); int n = grid[0].size(); vector<vector<int>> f = vector<vector<int>>(m,vector<int>(n)); int sum = 0; for(int i=0;i<m;i++) { sum += grid[i][0]; f[i][0] = sum; } sum = f[0][0]; for(int i=1;i<n;i++) { sum += grid[0][i]; f[0][i] = sum; } for(int i=1; i<m; i++) { for(int j=1; j<n; j++) { f[i][j] = min(f[i-1][j], f[i][j-1]) + grid[i][j]; } } return f[m-1][n-1]; }};
对上面的DP进行空间复杂度的优化,用一维数组从上往下刷一遍。
class Solution {public: int minPathSum(vector<vector<int> > &grid) { int m = grid.size(); int n = grid[0].size(); vector<int> f(n); fill(f.begin(), f.end(), INT_MAX); f[0] = 0; for(int i = 0; i < m; i++) { f[0] += grid[i][0]; for(int j = 1; j < n; j++) { f[j] = min(f[j-1], f[j]) + grid[i][j]; } } return f[n-1]; }};
方法三:DFS+备忘录
注意:
(1)传grid的时候要传引用,否则会MLE,因为每一次dfs都会创建原grid的副本。
(2)if(x<0 || y<0) 要返回INT_MAX,因为我们要取小。
class Solution {private: vector<vector<int>> f; int getOrUpdate(vector<vector<int>> &grid,int x, int y) { if(x<0 || y<0) return INT_MAX; if(f[x][y] >= 0) return f[x][y]; else return f[x][y] = dfs(grid,x,y); } int dfs(vector<vector<int>> &grid, int x, int y) { if(x<0 || y<0) return 0; if(x==0 && y==0) return grid[0][0]; return min(getOrUpdate(grid, x-1, y), getOrUpdate(grid, x, y-1)) + grid[x][y]; }public: int minPathSum(vector<vector<int> > &grid) { int m = grid.size(); int n = grid[0].size(); this->f = vector<vector<int>>(m,vector<int>(n,-1)); return dfs(grid,m-1,n-1); }};
0 0
- 【DP】Minimum Path Sum
- Minimum Path Sum DP
- DP Minimum Path Sum
- [DP] Minimum Path Sum
- DP------Minimum Path Sum
- 【Leetcode】Minimum Path Sum (DP)
- [leetcode][DP] Minimum Path Sum
- leetcode---minimum-path-sum---dp
- Leetcode-Minimum Path Sum(dp)
- leetcode -- Minimum Path Sum -- 简单DP
- 64. Minimum Path Sum DP经典问题
- LeetCode OJ-64.Minimum Path Sum(DP)
- LeetCode-64-Minimum Path Sum DP水题
- 64. Minimum Path Sum (dp)
- Leetcode - Dynamic Progr - 64. Minimum Path Sum(BFS+DP)
- leetcode 64. Minimum Path Sum DP动态规划
- DP问题—Leetcode 64. Minimum Path Sum
- LeetCode: Minimum Path Sum
- 算法设计与分析入门篇----分治作业 1
- 动态获取Bing每日壁纸
- java并发编程 -volatile关键字
- Java观察者模式(Observer模式)
- (转)GetResponse()获取错误时处理方式
- DP Minimum Path Sum
- Java组成部分、JDK和SDK的区别、JDK的安装
- UITextView使用自定义表情键盘
- 神经网络matlab的使用
- 安装Linux Mint 17后要做的20件事
- 2010年山东省第一届ACM大学生程序设计竞赛——Fairy tale
- PyQt5的菜单栏,工具栏,状态栏的合并
- UVA 12186 Another Crisis
- 数字集成电路设计-17-svunit环境构建