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

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

牛客对应题目链接:[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 类型题。


相关文章
|
1月前
|
算法
算法刷题(二十二):宝石与石头
算法刷题(二十二):宝石与石头
45 0
|
4天前
[NOIP2002]过河卒 标准递归
[NOIP2002]过河卒 标准递归
20 6
|
8天前
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
8 0
|
1月前
【编程题-错题集】kotori和气球(组合数学)
【编程题-错题集】kotori和气球(组合数学)
|
7月前
|
算法 测试技术 容器
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
33 1
【动态规划上分复盘】这是你熟悉的地下城游戏吗?
【动态规划上分复盘】这是你熟悉的地下城游戏吗?
|
10月前
|
算法 Android开发 Kotlin
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
98 0
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
|
10月前
|
算法
【过河卒】回溯算法保姆式解题
【过河卒】回溯算法保姆式解题
58 0
|
算法
每日一题冲刺大厂第十七天 逆序对
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
233 0
过河卒-蓝桥杯-动态规划
过河卒-蓝桥杯-动态规划
87 0