zoukankan      html  css  js  c++  java
  • 动态规划的引入 P1002 过河卒【动态规划】

    题目

    https://www.luogu.com.cn/problem/P1002

     题目分析

    卒可以向右、向下走,所以使用dp数组,如果自己的左边是通的(不是被马控制的节点)就把自己的dp加上自己左边的dp(上边同理),一直到最后最右下方的节点,该点的dp值就是答案

    至于马的控制点:另外开一个数组,标记马的控制节点(这里注意在类似迷宫的题目中就早点方向的移动使用数组的方式来实现是比较方便的

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    long long  dp[50][50];
    int tmp[50][50];
    int tmpx[8] = { 1,-1,2,2,-2,-2,-1,1 };
    int tmpy[8] = { 2,2,1,-1,1,-1,-2, -2 };
    
    int x, y, x2, y2;
    int main()
    {
        scanf("%d%d%d%d", &x, &y, &x2, &y2);
        tmp[x2][y2] = 1;
        for (int i = 0; i < 8; i++)
        {
            int xx = tmpx[i] + x2;
            int yy = tmpy[i] + y2;
            if (xx >= 0 && xx <= x&&yy >= 0 && yy <= y)
                tmp[xx][yy] = 1;
        }
        for (int i = 0; i <= x; i++)
        {
            dp[i][0] = 1 ^ tmp[i][0];
            if (dp[i][0] == 0)break;
        }
        for (int i = 0; i <= y; i++)
        {
            dp[0][i] = 1 ^ tmp[0][i];
            if (dp[0][i] == 0)break;
        }
    
        for (int i = 1; i <= x; i++)
        {
            for (int j = 1; j <= y; j++)
            {
    
                dp[i][j] = (dp[i - 1][j] + dp[i][j - 1])*(1 ^ tmp[i][j]);
            }
        }
        printf("%lld", dp[x][y]);
    }
  • 相关阅读:
    Lua 学习之基础篇一<Lua 运算符>
    Git: invalid active developer path
    Lua中使用continue 小练习
    Xcode 运行objc_msgSend 提示objc_msgsend()Too many arguments to function call, expected 0
    逆向思维
    机场
    旅行者
    好图计数
    支配树
    一般图最大匹配
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13121703.html
Copyright © 2011-2022 走看看