题目背景
一个机器人位于一个 n x m 网格的左上角 机器人每次只能向下或者向右移动一步。它试图达到网格的右下角

题目描述
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。

输入格式
第一行两个数n,m,

第二行到n+1行为网格

输出格式
路径总数

输入输出样例
输入
3 3
000
010
000
输出
2
说明/提示
1 <= m, n <= 100
网格里只有 0 或 1
另: 对于样例,3x3 网格的正中间有一个障碍物。 从左上角到右下角一共有 2 条不同的路径:

向右 -> 向右 -> 向下 -> 向下
向下 -> 向下 -> 向右 -> 向右

解题思路:
这题跟不同路径 I的区别就是加了障碍,不过也是简单题,我们只要标记障碍的位置,用st数组进行标记,记住,这题输入的话要用char,如果我们用int,当我们输入数字0和1时,因为之间没有空格,计算机是不知道数字怎么分开的,所以用char读入。首先我们定义dp[i][j]表示为机器人从左上角走到(i,j)这个点的走法总数,然后因为机器人每次只能向下或者向右移动一步,所以不难想到关系表达式为:
dp[i][j] = dp[i-1][j]+dp[i][j-1];

当机器人遇到障碍,dp[i][j] = 0;
然后我们想想如何初始化,因为机器人从左上角一直往左走,或者一直往下走,只有一种走法,然后如果这路径有障碍,后面的路就无法走了,当然,如果最开始左上角的位置就有障碍,那就根本走不到右下角,故初始化代码如下:

if (st[0][0]) {cout << "0" << endl;return 0;}elsedp[0][0] = 1;
for (int i = 1; i < n; i++) {if (st[i][0])dp[i][0] = 0;elsedp[i][0] = dp[i - 1][0];}
for (int i = 1; i < m; i++) {if (st[0][i])dp[0][i] = 0;elsedp[0][i] = dp[0][i - 1];}

ac代码如下:

#include <iostream>
using namespace std;
const int N = 110;
char g[N][N];
bool st[N][N];
int dp[N][N];int main() {int n, m;cin >> n >> m;for (int i = 0; i < n; i++)for (int j = 0; j < m; j++) {cin >> g[i][j];if (g[i][j] == '1')st[i][j] = true;}if (st[0][0]) {cout << "0" << endl;return 0;}elsedp[0][0] = 1;for (int i = 1; i < n; i++) {if (st[i][0])dp[i][0] = 0;elsedp[i][0] = dp[i - 1][0];}for (int i = 1; i < m; i++) {if (st[0][i])dp[0][i] = 0;elsedp[0][i] = dp[0][i - 1];}for (int i = 1; i < n; i++)for (int j = 1; j < m; j++) {if (st[i][j])dp[i][j] = 0;elsedp[i][j] = dp[i - 1][j] + dp[i][j - 1];}cout << dp[n - 1][m - 1] << endl;return 0;
}

不同路径 II-dp相关推荐

  1. LeetCode-动态规划基础题-63. 不同路径II

    描述 63. 不同路径II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角 ...

  2. leetcode题库--63不同路径 II

    不同路径 这题就是一个组合问题. int fun(int num){int ans = 1;while(num){ans*=num;num--;}return ans;}int uniquePaths ...

  3. 20200706:不同路径 II(leetcode63)

    不同路径 II 题目 思路与算法 代码实现 题目 思路与算法 经典动态规划题,注意细节即可,代码注释很详细. 代码实现 class Solution {public int uniquePathsWi ...

  4. 63. 不同路径 II【动态规划】

    63.不同路径 II 题目链接:https://leetcode-cn.com/problems/unique-paths-ii/ 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 ...

  5. Java实现 LeetCode 63 不同路径 II(二)

    63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...

  6. leetcode菜狗入门 | 62. 不同路径 63. 不同路径 II

    不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图 ...

  7. L63不同路径 II

    不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标 ...

  8. LeetCode:63. 不同路径 II

    题目链接 63. 不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图 ...

  9. HDOJ 5087 Revenge of LIS II DP

    HDOJ 5087 Revenge of LIS II DP DP的时候记录下能否够从两个位置转移过来. ... Revenge of LIS II Time Limit: 2000/1000 MS ...

  10. poj 3728 The merchant// lca(倍增实现) + dp || tarjan+并查集路径上dp

    poj 3728 The merchant// lca(倍增实现) + dp Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: ...

最新文章

  1. 《图像处理实例》之 曲线之间距离求解
  2. TexturePacker
  3. 积木式开发中Session的处理问题
  4. char,Character,int,字符及编码日记 1
  5. VTK:Rendering之Rotations
  6. 【蜕变之路】第29天 CAST和CONVERT的区别(2019年3月19日)
  7. 使用 gRPCurl 调试.NET 5的gPRC服务
  8. 如何判断Intent有没有对应的Activity去处理?
  9. 扑克牌的完美洗牌算法
  10. ResNet网络理解
  11. Mentor工具简介
  12. COM组件的编写与注册
  13. 我所能理解的编程境界
  14. HTML5期末大作业:个人网站设计——简单响应式个人博客HTML模板(8页面) HTML+CSS+JavaScript...
  15. 跟着团子学SAP:售前项目、项目前期管理思路
  16. gin endless 热重启
  17. ajax json destoon,destoon数据如何生成json
  18. 笔记怎么放思维导图图片
  19. phpcms富文本框上传图片去除水印
  20. 【docker】gitlab + qqmail配置SMTP

热门文章

  1. 《零基础看得懂的C++入门教程 》——(4)条件判断原来如此
  2. java的概率的程序_java实现一个抽奖概率类
  3. 围棋经典棋谱_秀秀老师:茶艺师也要学好围棋
  4. asp 强制转换浮点数值_C/C++中浮点数的编码存储
  5. oracle 快捷 企业,Oracle自治数据库提供APEX 20.1,助企业快速构建应用
  6. 战队口号霸气押韵8字_高考励志班级口号霸气押韵大全
  7. 潜入水下后,水越深,受周围的挤压力越大...
  8. 用高等数学“铲雪”!这个200多年前的证明太厉害了,有城市用它省了2000多万..........
  9. 这是你想象中的泳池美女吗?爱了吗?
  10. 日本惊现神操作!偷偷研究飞刀方程致使厕所爆炸......