洛谷P1102 过河卒
P1102 过河卒
链接在此
过河卒
此题如果直接忽略掉马的影响的话,可以看出很简单的递推规律
即
\]
也就是说,由于卒只能走直线且每次只能向下或向右走一步,那么,要到达第(i,j)点,卒只能从(i-1,j)点以及(i,j-1)这两个点来达到。因此,卒走到第(i,j)点的路径条数即为卒走到第(i-1,j)以及(i,j-1)点的路径条数和,以此类推,因此只需要初始化初值条件就可以推出答案
但是这里我们加上了一个限制条件,也就是马能触及到的地方不能走,当然所在的地方更不能走(容易忘)
所以我们在原先的递推上将这些点标记起来(可以用一些特殊值如-1或者开个bool数组来进行标记),当递推的时候我们直接略过这些点
举个例子
对于点(2,2),\(dp[2][2]=dp[1][2]+dp[2][1]\),但是明显点(1,2)是不可经过的点,因此\(dp[2][1]\)应该恒等于0,因为没有任何一条路径会经过它。所以此时\(dp[2][2]=dp[1][2]\)
AC代码如下
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int offsetx[8] = { +2,+1,-1,-2,-2,-1,+1,+2 };
const int offsety[8] = { +1,+2,+2,+1,-1,-2,-2,-1 };
//马偏移量记录
long long Map[30][30];
//结果记录,不开longlong会爆掉
int main()
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
for (int i = 0; i < 8; i++)
{
int x = x2 + offsetx[i];
int y = y2 + offsety[i];
if (x >= 0 && y >= 0 )//保证不出界
Map[x][y] = -1;
//这里采取将所有不可经过点标记为-1
}
if (x2 >= 0 && y2 >= 0)//马所在的那个点也要标记-1
Map[x2][y2] = -1;
for (int i = 0; i <= x1; i++)
if (Map[i][0] != -1)
Map[i][0] = 1;
else
break;
for (int i = 0; i <= y1; i++)
if (Map[0][i] != -1)
Map[0][i] = 1;
else
break;
//以上两步是将dp数组的边界初始化为1(很容易想到边界的值都为1)
//但是要注意一旦遇到不可经过点处于边界上时,此后的Map[i][j]一律为0
//因为对于边界点Map[i][0](Map[0][i])=Map[i-1][0],而如果(i-1,0)这个点为-1,意味着无法经过这个点到达后面的点,因此此时Map[i][0]=0
for (int i = 1; i <= x1; i++)
for (int j = 1; j <= y1; j++)
{
if (Map[i][j] != -1)//跳过不可经过点
{
if (Map[i - 1][j] != -1)//判断是否为-1
Map[i][j] += Map[i - 1][j];
if (Map[i][j - 1] != -1)
Map[i][j] += Map[i][j - 1];
}
}
cout << Map[x1][y1] << endl;
return 0;
}
洛谷P1102 过河卒的更多相关文章
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1002——过河卒
又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...
- 洛谷 P1002 过河卒 【棋盘dp】
题目链接:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷[P1002]过河卒
原题地址:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- 洛谷P1002 过河卒【dp】
棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过河卒 ...
- 洛谷——P1002 过河卒||codevs——T1010 过河卒
https://www.luogu.org/problem/show?pid=1002#sub||http://codevs.cn/problem/1010/ 题目描述 棋盘上A点有一个过河卒,需要走 ...
- 洛谷P1002 过河卒 [2017年4月计划 动态规划15]
P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- 【做题笔记】洛谷P1002过河卒
虽说是 dp 入门题,但还是有很多细节需要注意 如果设 \(f_{x,y}\) 为目标地点为 \((x,y)\) 时走的种数,那么答案就是 \(f_{n,m}\) 在不考虑那只讨厌的马的情况下,对于任 ...
随机推荐
- 智能制造之 SMT 产线监控管理可视化
前言 随着<中国制造2025>的提出,制造业迎来了全新的发展机遇.更多的企业将制造业信息化技术进行广泛的应用,如 MES 系统.数字孪生以及生产管理可视化等技术的研究应用,已经成为社会各界 ...
- echarts折线图美化(颜色渐变、背景透明、隐藏坐标轴)
echarts折线图美化(颜色渐变.背景透明.隐藏坐标轴) https://blog.csdn.net/Changeable0127/article/details/81333559?utm_medi ...
- (已解决)pulse secure 连接功能变灰禁用 连接面板找不到
今天打开 pulse secure 时,发现窗口变成了这样: 连接功能是灰色的,被禁用了: 解决方案: 运行 PulseSecureService 服务. 然后就正常了!
- P1914 小书童——凯撒密码
1.题目介绍 小书童--凯撒密码 题目背景 某蒟蒻迷上了 "小书童",有一天登陆时忘记密码了(他没绑定邮箱 or 手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但 ...
- [转帖]shell编程:shell变量的核心基础知识与实战(二)
shell编程:shell变量的核心基础知识与实战(二) https://www.cnblogs.com/luoahong/articles/9152039.html Shell 变量类型 变量可以分 ...
- [转帖]如何使用coredump
一.coredump 当用户态进程出现异常后,在该进程的执行目录下生成对应的coredump文件,如果我们想将coredump生成的位置做改变,就需要如下设置. echo "/home/co ...
- [转帖]前后台切换命令(ctrl+z jobs bg fg &)
当我在终端里面运行某个命令的时候,结果不是很快就能出来的那种,或者是一大堆字在屏幕上狂翻.这个时候,有时ctrl+c也不起作用,那我会用ctrl+z退出来,这个很有效,但是说实话我不知道为什么这个可以 ...
- [转帖]SQL Server JDBC – Set sendStringParametersAsUnicode to false
https://vladmihalcea.com/sql-server-jdbc-sendstringparametersasunicode/ https://learn.microsoft.com/ ...
- CentOS8 安装Oracle19c RPM的办法
1. 下载相应的rpm包 我这边使用的主要有: -rw-r--r-- 1 root root 19112 Apr 5 15:13 compat-libcap1-1.10-7.el7.x86_64.rp ...
- Docker内JVM参数的简单学习
Docker内JVM参数的简单学习 背景 公司内部有K8S的项目. 基于K8S内容器的JVM参数的设置与标准虚拟机运行不太一样. 产品内部的启动脚本有一个设置, 在内存大于16G的情况下 默认取内存总 ...
