#include <bits/stdc++.h>
using namespace std;

/*
   每次只能向右或向下走
   dp[m][n] = dp[m-1][n]+dp[m][n-1];表示走到(m,n)位置的走法
   这道题求有多少条路径?那么理所应当想到动态规划。
   我们令dp[i][j]是到达i,j最多路径
   动态方程:dp[i][j] = dp[i-1][j]+dp[i][j-1];
   和上面的公式是一样的
   对于第一行dp[0][j]和第一列dp[i][0],由于都是在边界,所以只能为1
   时间复杂度O(m*n)
   空间复杂度O(m*n)
*/

int uniquePaths(int m,int n)
{
    /*
    dp[i][j]是到达i和j最多的路径
    但是为什么i=0的时候 都要弄成1呢?
    因为这是初始化过程最上面和最左边的都是1
    */
    vector<vector<int>> dp(m,vector<int>(n,0));
    for(int i = 0;i<m;i++)
        dp[i][0]=1;
    for(int j = 0;j<n;j++)
        dp[0][j]=1;
    for(int i = 1;i<m;i++)
    {
        for(int j = 1;j<n;j++)
        {
            dp[i][j] = dp[i-1][j]+dp[i][j-1];
        }
    }
    return dp[m-1][n-1];
}
/*
    优化1:
    由于dp[i][j]=dp[i-1][j]+dp[i][j-1],因此只需要保留当前行与上一行的数据(在动态方程中,即pre[j] = dp[i-1][j]),空间复杂度O(2n)
    其实就是:
    当前的状态只跟上一行的状态和同一行左边的状态相关。所以我们只需要维护上一行的数组,和当前行的数组。那么pre就是上一行的状态(整行),cur就是当前行的状态。
*/
int uniquePaths1(int m,int n)
{
    vector<int>pre(n);
    vector<int>cur(n);
    //初始化 把所有的值都填成1
    for(int i = 0;i<n;i++)
    {
        pre[i] = 1;
        cur[i] = 1;
    }
    for(int i = 1;i<m;i++)
    {
        for(int j = 1;j<n;j++)
            cur[j] = cur[j-1]+pre[j];
    }
    return cur[n-1];
}

/*
   优化2:
   cur[j] += cur[j-1];即cur[j] = cur[j]+cur[j-1];
   等价于思路二:  cur[j] = pre[j]+cur[j-1];
   因此,空间复杂度为O(n)。
*/

int uniquePaths2(int m,int n)
{
    vector<int>cur(n);
    for(int i = 0;i<n;i++)
        cur[i] = 1;
    for(int i=1;i<m;i++)
    {
        for(int j=1;j<n;j++)
        {
            cur[j] += cur[j-1];
        }
    }
    return cur[n-1];

}

int main()
{
    int m = 5,n = 8;
    int num = uniquePaths2(m,n);
    cout<<num<<endl;

system("pause");
    return 0;
}

给定一个矩阵m*n,从左上角开始每次只能向右和向下走,最后到右下角的位置共有多少种路径。相关推荐

  1. 给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置

    /*  * 给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置,  * 路径中所有数字累加起来就是路径和,返回所有路径的最小路径和,如果给定的m如下,那么路径1,3,1,0,6 ...

  2. 给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径

    题目描述 给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和. 思路: 1.排列组合 要从A到B,必须向左走6 ...

  3. [分支限界]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径

    分支限界解最短路径 问题描述: 要求: 随机数算法 分支限界算法 程序源码 问题描述: 给定一个m行n列的矩阵,从左上角开始每次只能向右或向下移动,最后到达右下角的位置,路径上的所有数字累加起来作为这 ...

  4. [算法]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径

    很经典的一道题 等同于:https://leetcode-cn.com/problems/unique-paths/ 在完美世界面试中遇到了. 每次都只能向右或者向下走,求出所有种情况. 当时想到的思 ...

  5. 请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走。

    请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走. 递归实现: # ...

  6. M×N的矩阵,从左上角走,只能向右或者向下走,要求走过的每个元素的值加起来的和最大,步数不限

    题目描述 M×N的矩阵,从左上角走,只能向右或者向下走,要求走过的每个元素的值加起来的和最大,步数不限 代码实现 import numpy as np def max_way(a,m,n):dp=[[ ...

  7. 一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子

    格子路径 题目: 在一个 2×2 的栅格中,从左上角出来,只能向右或向下移动,总共有 6 条路径可以到达栅格的右下角: 求m*n的网格中,有多少条移动路径? 以一个 20×20 的栅格为例,它有137 ...

  8. 给定一个m*n的格子或棋盘,问从左上角走到右下角的走法总数(每次只能向右或向下移动一个方格边长的距离。

    比如一个2*3的矩阵, 1 2 3 4 5 6 从1出发走到6,则可能的走法为:1 2 3 6, 1 2 5 6, 1 4 5 6共有三种. 这道题可以看成是深度优先遍历一颗树.解法为: public ...

  9. Leetcode:62题 不同路径(一个机器人位于一个 m x n 网格的左上角 。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角)

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

最新文章

  1. JavaScript碎片—函数闭包(模拟面向对象)
  2. PHP和MySQL入门(8)
  3. mac之自己摸索的常用快捷键总结
  4. bfc是什么_全面分析总结BFC原理及实践
  5. 新手指导:51CTO微博小技巧
  6. 在VS2012中实现ExtJS的智能提示
  7. python居中对齐符号怎么打_Python字符串居中对齐
  8. 自动驾驶汽车寿命只有四年?
  9. Tidal Finance在Uniswap开启流动性挖矿
  10. 简练软考知识点整理-管理沟通
  11. 上网痕迹查询助手Viewurl 2017
  12. 嵌入式操作系统新纪元?
  13. 判断三点方向(顺时针或逆时针)
  14. 技术控 | 自然语言技术在文智趋势分析产品上的应用
  15. afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requi
  16. 【转载】解决illustrator cs6提示错误16的方法
  17. 【最详细,最新】电脑网站接入支付宝接口
  18. 【附源码】计算机毕业设计java智慧停车系统设计与实现
  19. 华为设备配置策略路由引流到旁挂防火墙
  20. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记15 storyboard中的绘图 MVC模式

热门文章

  1. R语言做Scheirer–Ray–Hare检验
  2. Android 使用百度鹰眼实现运动轨迹功能
  3. OPPO折叠屏,被期待的“颠覆者”
  4. Linux根目录下各文件都是存放什么的
  5. 【免费】win7 所有.net framework框架集合,免费下载,若要运行此应用程序,您必须首先安装net framework如何解决
  6. 关于考证(已通过高项、CISA、CISSP、HCIP、RHCE)
  7. [古典密码]:Vigenere cipher 维吉尼亚密码
  8. html pc端一般宽度多少钱,pc网页设计尺寸_pc端网页设计尺寸规范
  9. 攻防世界web新手题(小白做题)
  10. 2018腾讯实习招聘笔试编程题之翻转数列