【错题集-编程题】过河卒(动态规划-路径问题)

简介: 【错题集-编程题】过河卒(动态规划-路径问题)

牛客对应题目链接:[NOIP2002 普及组] 过河卒_牛客题霸_牛客网


一、分析题目

简单路径 dp 问题,相当于是有障碍物的路径类问题,标记⾛到障碍物上的⽅法数为 0 即可。

1、dp[i][j] 状态表示

从 [0, 0] 位置出发,到达 [i, j] 位置,一共有多少种方法。


2、状态转移方程

dp[i][j]:

  • 0(如果走不到就为 0)
  • dp[i-1][j] + dp[i][j-1](因为卒只能向下或者向右走)

3、初始化

dp[0][0] = 1


(下面的代码是因为改变了映射关系,所以上面的含义可能会有一点变化,比如下面设定的 dp[0][1] = 1,是为了能通过递推关系得到 dp[1][1] = 1)


二、代码

//值得学习的代码
#include <iostream>
using namespace std;
 
int n, m, x, y;
long long dp[25][25];
 
int main()
{
    cin >> n >> m >> x >> y;
 
    // 方便后续下标的映射
    x += 1; y += 1;
 
    dp[0][1] = 1;
 
    // 原始的棋盘是[0, n][0, m]
    // 我们的dp表是多一行、多一列的
    for(int i = 1; i <= n + 1; i++)
    {
        for(int j = 1; j <= m + 1; j++)
        {
            // 马的控制点以及马本身的位置
            if(i != x && j != y && abs(i - x) + abs(j - y) == 3 || (i == x && j == y))
            {
                dp[i][j] = 0;
            }
            else
            {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
    }
 
    cout << dp[n + 1][m + 1] << endl;
 
    return 0;
}

三、反思与改进

最近一做矩阵类型的题就总是先想到 bfs,不过这道题用 dp 来解,我确实是想不到。估计这道题我理解错含义了,因为我不管怎么罗列几个样例,结果都是 0,怎么也走不出原码的控制范围,后面总结的时候再仔细看题意,发现漏了一个条件(x1 != x,y1 != y)审题不仔细啊!多去看看跟路径相关的 dp 类型题。


相关文章
|
6月前
|
算法
算法刷题(二十二):宝石与石头
算法刷题(二十二):宝石与石头
67 0
|
4月前
【蓝桥杯】[递归]母牛的故事
蓝桥杯——[递归]母牛的故事
57 1
【蓝桥杯】[递归]母牛的故事
|
5月前
[NOIP2002]过河卒 标准递归
[NOIP2002]过河卒 标准递归
39 6
|
6月前
|
机器学习/深度学习 算法 测试技术
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”(二)
这篇内容是关于解题策略的,主要介绍了在面对应用题时可以采用的“三板斧”方法:举例、模拟和找规律。通过一个走楼梯的例子详细解释了这三个步骤如何运用。首先,举例将抽象问题具体化,比如走5级台阶有几种方式。其次,通过模拟不同情况,例如思考走每一步的可能,发现递归或循环的模式。最后,通过找规律归纳出一般性的解决方案,这里发现走台阶问题与斐波那契数列相关。文章还提到了一个拓展案例——矩形覆盖问题,同样可以用类似的方法分析。总的来说,文章强调了解题过程中理解和转化问题的重要性,以及通过训练提升这方面能力。
56 0
|
6月前
|
C语言
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”(一)
这篇内容介绍了C语言学习中的经典例题——斐波那契数列,强调了解题思路的重要性。斐波那契数列是一个数列,其中每个数是前两个数的和。文章指出,很多类似题目,如“青蛙跳台阶”,实质上都在考察斐波那契数列的实现。文中提供了斐波那契数列的定义、代码实现和递归与非递归的思路,并鼓励读者从问题中分析出解题模型,而非直接套用已知方法。此外,还提及了一道相关题目“矩形覆盖问题”,以供进一步练习。
49 0
|
6月前
【编程题-错题集】kotori和气球(组合数学)
【编程题-错题集】kotori和气球(组合数学)
|
6月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
29 0
|
算法 测试技术 容器
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
44 1
【洛谷算法题】B2029-大象喝水【入门1顺序结构】
【洛谷算法题】B2029-大象喝水【入门1顺序结构】
|
算法
【过河卒】回溯算法保姆式解题
【过河卒】回溯算法保姆式解题
95 0