zoukankan      html  css  js  c++  java
  • 不同路径--leetcode62

     

    int uniquePaths(int m, int n){
        int i,j;
        int dp[m][n];
        memset(dp,0,sizeof(dp));
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                if(i==0&&j>0)//边界条件
                {
                    dp[i][j]=dp[i][j-1];
                }
                else if(i>0&&j==0)//边界条件
                {
                    dp[i][j]=dp[i-1][j];
                }
                else if(i==0&&j==0)
                {
                    dp[i][j]=1;     //边界条件
                }
                else{
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];   //状态方程
                }
            }
        }
        return dp[m-1][n-1];
    }

    这一题算是自己第一次看懂点了动态规划的方法,写一些自己的见解,如有错误还请指正。

     动态规划问题:

    1、确定状态转移方程

    首先需要确定状态方程由题可知,用一个二维数组dp[i][j]表示走到(i,j)点的路径个数。由体可知,其结果是dp[i-1][j]和dp[i][j-1]的和。即:dp[i][j]=dp[i-1][j]+dp[i][j-1];

    2、确定边界条件

    从题中可知,dp[0][0]=1,即从第一个点出发到第一个点有1条路径。对于第一行的元素,由于路径行走只能向右或向下,因此dp[0][j]=dp[0][j-1]=1.同样的对于第一列的元素。dp[i][0]=dp[i-1][0]=1。

    大佬的思路。

     

  • 相关阅读:
    POJ 2653 Pick-up sticks [线段相交 迷之暴力]
    POJ1556 The Doors [线段相交 DP]
    POJ 3304 Segments[直线与线段相交]
    POJ2318 TOYS[叉积 二分]
    挖坑
    HDU3488 Tour [有向环覆盖 费用流]
    BZOJ 3438: 小M的作物 [最小割]
    POJ 2125 Destroying The Graph [最小割 打印方案]
    网络流算法与建模总结
    CF266D. BerDonalds [图的绝对中心]
  • 原文地址:https://www.cnblogs.com/sbb-first-blog/p/13257791.html
Copyright © 2011-2022 走看看