64.Minimum Path Sum
2015-08-08 22:55
253 查看
问题:给一个矩阵,求一条从左上角到右下角的路径的和,该路径上的数的和最小。
思路:很典型的动态规划问题。类似于数学归纳法。划分状态:dp[i][j]表示从坐标(i,j)到右下角的最小和。递推式:dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1])。注意边界条件即可。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size();
if(m==0) return 0;
int n=grid[0].size();
int** dp=new int*[m];
for(int i=0;i<m;i++){
dp[i]=new int
;
}
//initial
dp[m-1][n-1]=grid[m-1][n-1];
for(int i=m-2;i>=0;i--){
dp[i][n-1]=grid[i][n-1]+dp[i+1][n-1];
}
for(int j=n-2;j>=0;j--){
dp[m-1][j]=grid[m-1][j]+dp[m-1][j+1];
}
//dp process
for(int i=m-2;i>=0;i--){
for(int j=n-2;j>=0;j--){
dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1]);
}
}
//res
int res=dp[0][0];
for(int i=0;i<m;i++){
delete []dp[i];
}
delete []dp;
return res;
}
};
思路:很典型的动态规划问题。类似于数学归纳法。划分状态:dp[i][j]表示从坐标(i,j)到右下角的最小和。递推式:dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1])。注意边界条件即可。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size();
if(m==0) return 0;
int n=grid[0].size();
int** dp=new int*[m];
for(int i=0;i<m;i++){
dp[i]=new int
;
}
//initial
dp[m-1][n-1]=grid[m-1][n-1];
for(int i=m-2;i>=0;i--){
dp[i][n-1]=grid[i][n-1]+dp[i+1][n-1];
}
for(int j=n-2;j>=0;j--){
dp[m-1][j]=grid[m-1][j]+dp[m-1][j+1];
}
//dp process
for(int i=m-2;i>=0;i--){
for(int j=n-2;j>=0;j--){
dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1]);
}
}
//res
int res=dp[0][0];
for(int i=0;i<m;i++){
delete []dp[i];
}
delete []dp;
return res;
}
};
相关文章推荐
- 【算法与数据结构】B-树学习笔记
- 【算法与数据结构】B-树学习笔记
- C语言数组与指针(重要)
- scala实现设计模式之原型模式
- 当下的力量 读书笔记
- 20150808训练题+解题报告
- 13、C语言和设计模式(命令模式)
- 数据库mysql 自动分库分表备份脚本
- php flush类输出缓冲剖析
- DTcms学习笔记03(2015年8月8日)
- UE4发报机-UnBind_UnBindAll解绑定
- 蓝天 的第一个博客
- “赢在中国·蓝天碧水间”暴露的11位企业家的出身与人性
- Jvm加载器加载顺序
- “赢在中国·蓝天碧水间”暴露的11位企业家的出身与人性 分类: 业余 2015-08-08 22:53 4人阅读 评论(0) 收藏
- Http请求头和响应头
- FTP操作类
- VS2010链接错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Distribution money(水题--模拟)
- Service实现文件下载